在WebBrowser下對網頁進行操作其實是一件挺輕松的事情,他可以很方便實現自定義的網站訪問習慣。而WebBrowser畢竟是對MS原生 控件的封裝,當我們使用C#下的WebBrowser尤其是這樣,雖然他可以更方便大家去調用,但是他的方便卻是犧牲了靈活性為代價的。
有一天我想使用WebBrowser獲取一個網站的COOKIE,在調用Document.Cookie時,發現無法完整獲取其COOKIE,百思 不得其解,這么簡單的功能,WebBrowser也會秀逗。經過抓包分析,發現原來該網站對寫入到用戶端關鍵的Cookie,加入httponly
HttpOnly,其實是一個提高WEB網站應用程序安全性的一個功能,但是大家往往都把他給忽略掉了。比如在ASP.NET 2.0的web.config的配制文件里就提供這個子的設置
<httpCookies httpOnlyCookies=
"
true
" />
// 代碼如:
HttpCookie myCookie = new HttpCookie( " myCookie ");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);
// 代碼如:
HttpCookie myCookie = new HttpCookie( " myCookie ");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);
在實際的項目中,用WebBrowser登錄淘寶,
嘗試分別用辦法一和辦法二,然后將其Cookie傳給了HttpWebRequest請求需要登錄才能查看的淘寶頁面,按理說,應該不用再用HttpWebRequest模擬登錄一次的,可是返回的仍然是淘寶的登錄頁面。
//辦法一:創建的CookieContainer
//myRequest.CookieContainer = myCookieContainer;
//辦法二:
//myRequest.Headers[HttpRequestHeader.Cookie] = webBrowser1.Document.Cookie;
//myRequest.CookieContainer = myCookieContainer;
//辦法二:
//myRequest.Headers[HttpRequestHeader.Cookie] = webBrowser1.Document.Cookie;
以上這二種辦法,均發現 WebBrowser 的Cookie數量均減少,而且 JSESSIONID 不存在集合中。故模擬登陸策略失敗。
//******************************************************************************************************
研究了近二天,切換另一個抓包神器,
Fiddler2
//辦法三
根據捉包工具,用IE或火狐實際登陸后,再根據得到的Cookie,復制相應的鍵值,加到
HttpWebRequest 請求容器中,如下:
myRequest.Headers[HttpRequestHeader.Cookie] = "cookie2=....................... ";
采集通過。。。。