对WebRequest进行了封装,类库自动记录连续访问页面的cookies信息,使用该类库模拟登录网站比较方便
public class Http
{
/// <summary>
/// 使用Cookies
/// </summary>
public bool UseCookies { get; set; }
/// <summary>
/// 保存Cookies
/// </summary>
public bool SaveCookies { get; set; }
/// <summary>
/// 解码GZip
/// </summary>
public bool DecompressGZip { get; set; }
/// <summary>
/// Cookie容器
/// </summary>
public CookieContainer CookieContainer { get; set; }
private Encoding _coding;
/// <summary>
/// 编码
/// </summary>
public Encoding Coding {
get { return _coding ?? Encoding.UTF8; }
set { _coding = value; }
}
public Http()
{
UseCookies = true;
SaveCookies = true;
DecompressGZip = true;
CookieContainer = new CookieContainer();
}
private HttpWebRequest CreateRequest(string url, string method, string data = null, Encoding encoding = null, Dictionary<string, string> headers = null, string contentType = "application/x-www-form-urlencoded", string referer="")
{
try
{
var request = (HttpWebRequest) WebRequest.Create(url);
if (UseCookies)
request.CookieContainer = CookieContainer;
else
request.CookieContainer = new CookieContainer();
request.Method = method;
if (!string.IsNullOrEmpty(referer))
request.Referer = referer;
if (headers != null && headers.Count > 0)
{
foreach (var header in headers)
request.Headers.Add(header.Key, header.Value);
}
request.UserAgent =
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1";
if (method.Equals("post", StringComparison.CurrentCultureIgnoreCase))
{
request.ContentType = contentType;
if (!string.IsNullOrEmpty(data))
{
if (encoding == null)
encoding = Coding;
var bytes = encoding.GetBytes(data);
request.ContentLength = bytes.Length;
var requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
}
}
return request;
}
catch (Exception ex)
{
return null;
}
}
private Stream GetResponseStream(HttpWebRequest request)
{
var response = (HttpWebResponse)request.GetResponse();
if (SaveCookies && response.Cookies != null && response.Cookies.Count > 0)
{
for (var i = 0; i < response.Cookies.Count; i++)
CookieContainer.Add(response.Cookies[i]);
}
var responseStream = response.GetResponseStream();
if (DecompressGZip && response.ContentEncoding.ToLower().Contains("gzip"))
{
if (responseStream != null)
{
var stream = new GZipStream(responseStream, CompressionMode.Decompress);
return stream;
}
}
return responseStream;
}
public string Get(string url, Encoding coding = null, Dictionary<string, string> headers = null, string referer = "")
{
try
{
var request = CreateRequest(url, "Get", headers: headers, referer: referer);
var stream = GetResponseStream(request);
if (coding == null)
coding = Coding;
using (var reader = new StreamReader(stream, coding))
{
return reader.ReadToEnd();
}
}
catch (Exception ex)
{
return "";
}
}
public Image GetImage(string url, Encoding coding = null, Dictionary<string, string> headers = null,string refere="")
{
try {
var request = CreateRequest(url, "Get", headers: headers,referer:refere);
var stream = GetResponseStream(request);
return Image.FromStream(stream);
}
catch (Exception ex)
{
return null;
}
}
public string Post(string url, string data, Encoding coding = null, Dictionary<string, string> headers = null, string contentType = "application/x-www-form-urlencoded", string referer = "")
{
try{
var request = CreateRequest(url, "post", data, coding, headers,contentType,referer);
var stream = GetResponseStream(request);
if (coding == null)
coding = Coding;
using (var reader = new StreamReader(stream, coding))
{
return reader.ReadToEnd();
}
}
catch (Exception ex)
{
return "";
}
}
}
版权所有:有信心——uxinxin 我的个人网站欢迎常来!手机版(新站开启,请多多关照) 豫ICP备12017930号-1
豫公网安备41910102000493号