完美解決C#Webbrowser控件設置Cookie問題

完美解決C#Webbrowser控件設置Cookie問題
因爲我的項目需求,須要把從抓包裏面的Cookie數據寫入到webbrowser空控件裏,通過百度白百般折騰,結果仍是失敗,搜索到的答案基本上都是web

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);瀏覽器


InternetSetCookie(url, "cookieName", "cookieValue");
// navigate
webBrowser.Navigate(url);

方法自己沒錯,只是講的不夠詳細,並且我是須要設置好幾個Cookie鍵值對。須要用到循環遍歷。首先貼下個人詳細代碼:緩存

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
private void test(){cookie

string cookie = "name=小明; age=19;phone=13013139876"//須要設置到Webbrowser的Cookie信息
string url = "http://192.168.1.12/data/2016/student.htm";//訪問地址
string domain = "/data/2016";//目標主機域名
foreach (string c in cookie.Split(';'))
{
string[] item = c.Split('=');
if (item.Length == 2)
{
InternetSetCookie(url, null, new Cookie(HttpUtility.UrlEncode(item[0]).Replace("+", ""), HttpUtility.UrlEncode(item[1]), "; expires = Session GMT", "/").ToString());
}
}
webBrowser1.Navigate(url);
}

要注意上面的代碼.Replace(「+」, 「」),我被這個困惑了半天,致使Cookie只有第一個字段name設置成功,後面的age,phone字段都沒設置成功,經過抓包分析,發現設置後的Cookie字段前面多了個」+」號,都說細節決定成敗,確實如此。這個」+」號應該是HttpUtility.UrlEncode()編碼後致使的,可是若是你不進行HttpUtility.UrlEncode()編碼是絕對不行的,因此咱們只好經過.Replace(「+」, 「」)過濾掉」+」號,至此Cookie已經完美設置成功。
還有就是百度不能解決問題的時候,咱們要多多Google。
還有就是可能你手動設置Cookie的過程當中因爲傳參錯誤或其餘緣由致使webbrowser打開url提示錯誤500之類的,這時候須要手動打開電腦的IE瀏覽器,而後清除緩存記錄Cookie等。就能夠正常打開url了。
---------------------

dom

相關文章
相關標籤/搜索