使用HttpWebRequest和HttpWebResponse进行设置和获取Cookie
HttpWebRequest的使用方法
例:
Uri uri;
uri = new Uri("www.baidu.com");
HttpWebRequest webRqst = (HttpWebRequest)WebRequest.Create(url);
webRqst.Method = "GET";
webRqst.Accept = "*/*";
webRqst.KeepAlive = false;
webRqst.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36";
webRqst.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9,en-us;q=0.5");
//1. 直接在Http头中添加Cookie
//webRqst.Headers.Add("Cookie", cookieStr);
2. 使用HttpWebRequest的CookieContainer属性进行设置
CookieContainer ckCtnr = new CookieContainer();
if (ckClctn != null)
{
ckCtnr.Add(ckClctn);
}
//获取应答网页
webRqst.CookieContainer = ckCtnr;
HttpWebResponse webRspn = (HttpWebResponse)webRqst.GetResponse();
(!)注意点
只有HttpWebRequest设置了CookieContainer变量后,使用HttpWebRequest的GetResponse()函数获取的HttpWebResponse对象才能获取Cookie,通过HttpWebResponse.Cookies属性获取应答网页得到的Cookie。
HttpWebResponse获取Cookie的方法
CookieCollection cc;
cc = webRspn.Cookies;
string ckStr=string.Empty;
IEnumerator emn;
emn = cc.GetEnumerator();
while (emn.MoveNext())
{
Cookie cookie;
cookie = (Cookie)emn.Current;
ckStr += cookie.Name + ":" + cookie.Value+";";
}
//MessageBox.Show(ckStr);
HttpWebResponse获取结果网页
StreamReader sr = new StreamReader(webRspn.GetResponseStream(), Encoding.UTF8);
string rslt;
rslt = sr.ReadToEnd();
sr.Close();
Cookie重用
与第一次使用Cookie通过CookieContainer的方法相同,将CookieCollection添加到CookieContainer中,并且将CookieContainer设置为HttpWebRequest的对应属性。
HttpWebRequest webRqst = (HttpWebRequest)WebRequest.Create(url);
webRqst.Method = "GET";
webRqst.Accept = "*/*";
webRqst.KeepAlive = false;
webRqst.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36";
webRqst.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9,en-us;q=0.5");
2. HttpWebRequest的CookieContainer属性进行设置
CookieContainer ckCtnr = new CookieContainer();
if (ckClctn != null)
{
ckCtnr.Add(ckClctn); //此处的ckClctn是HttpWebResponse对象的Cookies属性
}