C#使用cookie httprequest访问webclient
我通过httprequest和cookie在各种cookiecontanse中登录了该站点。但现在我需要为webclient设置cookie。我用的是电话线C#使用cookie httprequest访问webclient,c#,cookies,httprequest,webclient,C#,Cookies,Httprequest,Webclient,我通过httprequest和cookie在各种cookiecontanse中登录了该站点。但现在我需要为webclient设置cookie。我用的是电话线 webClient.Headers.Add(HttpRequestHeader.Cookie,cookiecontanse.ToString) 但不是工作。为什么?用法: CookieContainer cookieJar = new CookieContainer(); cookieJar.Add(n
webClient.Headers.Add(HttpRequestHeader.Cookie,cookiecontanse.ToString)
但不是工作。为什么?用法:
CookieContainer cookieJar = new CookieContainer();
cookieJar.Add(new Cookie("my_cookie", "cookie_value", "/", "mysite"));
CookieAwareWebClient client = new CookieAwareWebClient(cookieJar);
string response = client.DownloadString("http://example.com/response_with_cookie_only.php");
您将看到GetWebRequest和GetWebResponse的两个重写方法。可以重写这些方法来处理cookie容器
public class CookieAwareWebClient : WebClient
{
public CookieContainer CookieContainer { get; set; }
public Uri Uri { get; set; }
public CookieAwareWebClient()
: this(new CookieContainer())
{
}
public CookieAwareWebClient(CookieContainer cookies)
{
this.CookieContainer = cookies;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = this.CookieContainer;
}
HttpWebRequest httpRequest = (HttpWebRequest)request;
httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
return httpRequest;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie];
if (setCookieHeader != null)
{
//do something if needed to parse out the cookie.
if (setCookieHeader != null)
{
Cookie cookie = new Cookie(); //create cookie
this.CookieContainer.Add(cookie);
}
}
return response;
}
}