背景:最近在模拟一个网站的登录,本来用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代替了,懂的同学帮帮我,谢了////。。。。