将CookieContainer与WebClient类一起使用

我以前在CookieHttpContainer和HttpWebRequest和HttpWebResponse会话中使用过,但是现在,我想在WebClient中使用它。据我了解,没有像HttpWebRequests(request.CookieContainer)那样的内置方法。

我对此进行了搜索,发现了以下示例:

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;

}

}

这是最好的方法吗?

回答:

是。恕我直言,覆盖GetWebRequest()是WebClient有限功能的最佳解决方案。在我知道此选项之前,我在HttpWebRequest层上编写了许多非常痛苦的代码,因为WebClient几乎(但不是完全)完成了我需要的工作。推导要容易得多。

另一种选择是使用常规WebClient类,但在发出请求之前手动填充Cookie头,然后在响应上拉出Set-

Cookies头。CookieContainer类上有一些辅助方法,这些方法使创建和解析这些标头更加容易:CookieContainer.SetCookies()CookieContainer.GetCookieHeader()

我喜欢前一种方法,因为它比第二种方法更容易调用,并且所需的重复代码更少。同样,派生方法对于多种可扩展性方案(例如cookie,代理等)也以相同的方式工作。

以上是 将CookieContainer与WebClient类一起使用 的全部内容, 来源链接: utcz.com/qa/404179.html

回到顶部