[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
private void test(){
string cookie = "name=小明; age=19;phone=13013139876"//需要設(shè)置到Webbrowser的Cookie信息
string url = "http://192.168.1.12/data/2016/student.htm";//訪問(wèn)地址
string domain = "/data/2016";//目標(biāo)主機(jī)域名
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(“+”, “”),我被這個(gè)困惑了半天,導(dǎo)致Cookie只有第一個(gè)字段name設(shè)置成功,后面的age,phone字段都沒(méi)設(shè)置成功,通過(guò)抓包分析,發(fā)現(xiàn)設(shè)置后的Cookie字段前面多了個(gè)”+”號(hào),都說(shuō)細(xì)節(jié)決定成敗,確實(shí)如此。這個(gè)”+”號(hào)應(yīng)該是HttpUtility.UrlEncode()編碼后導(dǎo)致的,但是如果你不進(jìn)行HttpUtility.UrlEncode()編碼是絕對(duì)不行的,所以我們只好通過(guò).Replace(“+”, “”)過(guò)濾掉”+”號(hào),至此Cookie已經(jīng)完美設(shè)置成功。
還有就是可能你手動(dòng)設(shè)置Cookie的過(guò)程中由于傳參錯(cuò)誤或其他原因?qū)е聎ebbrowser打開(kāi)url提示錯(cuò)誤500之類的,這時(shí)候需要手動(dòng)打開(kāi)電腦的IE瀏覽器,然后清除緩存記錄Cookie等。就可以正常打開(kāi)url了。
原文鏈接:https://blog.csdn.net/hangom/article/details/52619394
|