Skip to content

Instantly share code, notes, and snippets.

@chenxizhang
Created September 17, 2017 01:29
Show Gist options
  • Save chenxizhang/8f84aa65f6515075f13e4c9c1cb0cf6f to your computer and use it in GitHub Desktop.
Save chenxizhang/8f84aa65f6515075f13e4c9c1cb0cf6f to your computer and use it in GitHub Desktop.
自定义支持Cookie的WebClient
/// <summary>
/// 自定义的WebClient,支持Cookie,在多个请求之间可以重复利用
/// 作者:陈希章
/// 邮箱:ares@xizhang.com
/// 时间:2017年9月17日
/// </summary>
public class WebClientWithCookie : WebClient
{
/// <summary>
/// 默认构造器,创建一个空白的CookieContainer
/// </summary>
public WebClientWithCookie()
{
this.CookieContainer = new CookieContainer();
}
/// <summary>
/// 带参数的构造器,允许从外部传入一个CookieContainer,这样就能实现跨WebClient共享Cookie了
/// </summary>
/// <param name="cookie"></param>
public WebClientWithCookie(CookieContainer cookie)
{
this.CookieContainer = cookie;
}
/// <summary>
/// 这个属性用来保存cookiecontainer(容器)
/// </summary>
public CookieContainer CookieContainer { get; set; }
public void HeadRequest(string url)//专门的一个用来支持HEAD操作的方法
{
var request = GetWebRequest(new Uri(url));
request.Method = "HEAD";
request.GetResponseAsync();
}
/// <summary>
/// 这个方法可以支持自定义Request,构造出来这个对象后,还可以自己添加其他的设置,例如HEADER等信息
/// </summary>
/// <param name="url">访问地址</param>
/// <param name="method">HTTP Method</param>
/// <returns></returns>
public HttpWebRequest BuildRequest(string url,string method)
{
var request = GetWebRequest(new Uri(url));
request.Method = method;
return request as HttpWebRequest;
}
/// <summary>
/// 重写这个方法以便支持Cookie
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
protected override WebRequest GetWebRequest(Uri address)
{
var request= base.GetWebRequest(address);
if(request is HttpWebRequest)
{
var httpRequest = request as HttpWebRequest;
httpRequest.CookieContainer = CookieContainer;
}
return request;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment