模拟登录中cookie的问题

scyyzgxh 2016-03-25 07:52:23
背景:最近在模拟一个网站的登录,本来用webbrowser(下面简称wb)登录后,再从wb中获取cookie,是成功了的。。。
但后来因为使用wb觉得加载慢,还会有各种不方便,比如窗口多开,所以想直接post数据过去登录获取cookie,这个一直不行,我想是因为数据中有httponly的cookie的原因,导致cookie一直获取不完整,个人猜想,现在将cookie贴上(此cookie为直接访问登录页面时产生的cookie,非登录后的,但已经存在差异了):
用wb访问的cookie:
大概代码:其实主要是用了网上的通用方法,使用wininet.dll中的InternetGetCookieEx获取完整的cookie:
获取到的值:Hm_lvt_xx=xxxxxxxxxxxx; sid=xxxxxxxxxx; ttu=xxxxxxxxxxxx; Hm_lpvt_xx=xxxx; CNZZDATA=xxxxxxxxxxxxx; JSESSIONID=xxxxxxxxxx; route=xxxxxxxxxxxx; __jsluid=xxxxxxxxxxxx
直接通过url访问获取的cookie:
大概代码:
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(Url);
……//一堆参数
HttpWebResponse wrp = (HttpWebResponse)myHttpWebRequest.GetResponse();
string cookie = wrp.Headers.Get("Set-Cookie");//获取cookie

下面是cookie值:
JSESSIONID=xxxxxxxxxxxxxx; Path=/; HttpOnly,route=xxxxxxxxxxxxxx;Path=/,__jsluid=xxxxxxxxxxxxxx; path=/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
可以看到,直接访问url得到的cookie比用wb获取的cookie少了几项,其中直接访问得到中有个HttpOnly,这是不是说明这里应该有cookie,只是用了这么一个东西点位而不显示?不是很懂,而且一直没登录成功,而用wb登录后获取的cookie再访问其它页面,得到确实是登录后的html。。。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
总的来说,我是不能用控件了,想要直接用代码有没有办法得到完整的cookie?
ps:还有一点,如果不用控件,而直接用wininet.dll中的InternetGetCookieEx来获取cookie,也和直接访问url得到的cookie差不多,还是少好多项。
文中cookie值我用xxx代替了,懂的同学帮帮我,谢了////。。。。
...全文
483 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44364949 2019-05-28
  • 打赏
  • 举报
回复
楼上,用C#亚马逊模拟登录,怎么破解提交登录参数,求助!
xuzuning 2016-04-02
  • 打赏
  • 举报
回复
那么多天了,你并没有给出目标 URL 和正确的提交参数 给你了一些建议,你也并未采纳 只要你做过网站,你就该知道如何防范非法入侵 换句话所说,你在模拟提交时,就应尽己所有的绕过对方的防范措施
crystal_lz 2016-04-02
  • 打赏
  • 举报
回复
路过看见好几次这个帖子了 我就问你 到底你用cookiecontainer 去试了没 去模拟登录了么?。。 我模拟过的页面已经不知道有多少了 还真没遇到过cookiecontainer搞不定的 从你问问题到现在都快要十天了 你还在这里等答案 版主已经告诉了你为什么 你又觉得太复杂 如果你非要纠结去自己处理cookie 如果是公司的项目 你搞不定 那就叫同事帮忙 如果是你自己的东西 那就去了解http相关的知识 而不是在这里等答案
scyyzgxh 2016-04-02
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
cookie 是通过 HTTP协议 中的 SetCookie 项设定的 页面中任何链接(img、script、iframe 以及 ajax 等)都可能进行 cookie 变量设置 最终提交时的 cookie 变量,可能是之前多个页面 SetCookie 的结果(包括 js 进行的设置) HttpOnly 属性只是表示用 js 通过 document.cookie 不可访问到 HttpOnly 的含义是只在 HTTP协议 中生存 模拟提交时,需要充分考虑到各种因素
说得太专业太复杂了,我现在就是想将cookie完整的取出来,请问斑竹有什么好办法?
xuzuning 2016-04-01
  • 打赏
  • 举报
回复
cookie 是通过 HTTP协议 中的 SetCookie 项设定的 页面中任何链接(img、script、iframe 以及 ajax 等)都可能进行 cookie 变量设置 最终提交时的 cookie 变量,可能是之前多个页面 SetCookie 的结果(包括 js 进行的设置) HttpOnly 属性只是表示用 js 通过 document.cookie 不可访问到 HttpOnly 的含义是只在 HTTP协议 中生存 模拟提交时,需要充分考虑到各种因素
scyyzgxh 2016-04-01
  • 打赏
  • 举报
回复
引用 8 楼 aspower_ 的回复:
难道和useragent值有关? 你Ie浏览器是8.0的么?
我用的是IE-11,还有,useragent之前我已经指定过了,和FireBug出来的数据全一样post过去了,结果都还是那样的。。。
一笑拔剑 2016-03-30
  • 打赏
  • 举报
回复
难道和useragent值有关? 你Ie浏览器是8.0的么?
scyyzgxh 2016-03-29
  • 打赏
  • 举报
回复
引用 6 楼 crystal_lz 的回复:
[quote=引用 2 楼 scyyzgxh 的回复:]

CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;

这样?这意思是定义一个cookieContainer ,然后请求的时候把cookieContainer 带上就可以了?
但是请求的时候cookieContainer 是空的吧,难道说Response返回响应的时候,会自动填充cookieContainer ?



试一下对你来说 很难吗?

引用 1 楼 crystal_lz 的回复:
一个 CookieContainer 就能搞定了
CookieContainer cookieContainer = new CookieContainer();
request,CookieContainer = cookieContainer;
....
你什么都不用管 所有的cookie都会自动的被写入到 cookieContainer 里面
request的时候也会把cookieContainer里面的cookie自动带上
[/quote]
不好意思,我之前只是想问清楚一些而已,现在已经试过了,依然是不行的:如下图,敏感部分码掉了,希望大家不要见怪,弹框那个是用上面的同学提供的cookie容器访问得到的cookie,多的这项是用webbrowser得到的完整的cookie,可以看出来,仍然是不行的哦。。。


还请大家支一下招,多谢啦。。。
蜗牛慢慢趴 2016-03-28
  • 打赏
  • 举报
回复
curl "http://192.168.1.254/cgi-bin/login.cgi?pws=DWwwosMeJ5" -c curlcookie.txt
Justin-Liu 2016-03-28
  • 打赏
  • 举报
回复
http://zhidao.baidu.com/question/391090245209914085.html
crystal_lz 2016-03-28
  • 打赏
  • 举报
回复
引用 2 楼 scyyzgxh 的回复:

CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;

这样?这意思是定义一个cookieContainer ,然后请求的时候把cookieContainer 带上就可以了?
但是请求的时候cookieContainer 是空的吧,难道说Response返回响应的时候,会自动填充cookieContainer ?



试一下对你来说 很难吗?

引用 1 楼 crystal_lz 的回复:
一个 CookieContainer 就能搞定了
CookieContainer cookieContainer = new CookieContainer();
request,CookieContainer = cookieContainer;
....
你什么都不用管 所有的cookie都会自动的被写入到 cookieContainer 里面
request的时候也会把cookieContainer里面的cookie自动带上
scyyzgxh 2016-03-27
  • 打赏
  • 举报
回复
人呢?
scyyzgxh 2016-03-25
  • 打赏
  • 举报
回复

CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
这样?这意思是定义一个cookieContainer ,然后请求的时候把cookieContainer 带上就可以了? 但是请求的时候cookieContainer 是空的吧,难道说Response返回响应的时候,会自动填充cookieContainer ?
crystal_lz 2016-03-25
  • 打赏
  • 举报
回复
一个 CookieContainer 就能搞定了 CookieContainer cookieContainer = new CookieContainer(); request,CookieContainer = cookieContainer; .... 你什么都不用管 所有的cookie都会自动的被写入到 cookieContainer 里面 request的时候也会把cookieContainer里面的cookie自动带上

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧