如何将CookieContainer与WebClient类结合使用?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我以前在HttpWebRequest和HttpWebResponse会话中使用过CookieContainer,但现在,我想将它与WebClient一起使用。据我所知,没有像HttpWebRequest那样的内置方法(request.CookieContainer)如何从CookieContainer中的WebClient收集cookie?

谷歌为了这个发现以下示例:

public class CookieAwareWebClient : WebClient
{
    private readonly CookieContainer m_container = new CookieContainer();

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        HttpWebRequest webRequest = request as HttpWebRequest;
        if (webRequest != null)
        {
            webRequest.CookieContainer = m_container;
        }
        return request;
    }
}

这是最好的方法吗?

提问于
用户回答回答于

另一个选项是使用常规的WebClient类,但是在发出请求之前手动填充Cookie头,然后在响应中提取set-Cookies头。CookieContainer类上有帮助器方法,使创建和解析这些标头更容易:CookieContainer.SetCookies()CookieContainer.GetCookieHeader()分别。

用户回答回答于
 WebClient wb = new WebClient();
 wb.Headers.Add(HttpRequestHeader.Cookie, "somecookie");
wb.Headers.Add(HttpRequestHeader.Cookie, "cookiename=cookievalue"); 

对于多个cookie:

wb.Headers.Add(HttpRequestHeader.Cookie, 
              "cookiename1=cookievalue1;" +
              "cookiename2=cookievalue2");

扫码关注云+社区