实际上,这段代码是网上的,但是由于设置Cookie相对麻烦,所以增加了设置Cookie的方法.
另外,对Cookie中的’,’符号进行了转意,用了3个多月了,没有发现有什么问题,好久没有发文章了,今天抽空就发出来把 ^ ^
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; namespace JointOfficial.Model { /// <summary> /// 支持 Session 和 Cookie 的 WebClient。 /// </summary> public class HttpClient : WebClient { // Cookie 容器 private CookieContainer cookieContainer; /// <summary> /// 创建一个新的 WebClient 实例。 /// </summary> public HttpClient() { this.cookieContainer = new CookieContainer(); } /// <summary> /// 创建一个新的 WebClient 实例。 /// </summary> /// <param name="cookie">Cookie 容器</param> public HttpClient(CookieContainer cookies) { this.cookieContainer = cookies; } /// <summary> /// Cookie 容器 /// </summary> public CookieContainer Cookies { get { return this.cookieContainer; } set { this.cookieContainer = value; } } /// <summary> /// 坑爹之用 /// </summary> public object Tag { get; set; } /// <summary> /// 设置Cookie /// </summary> /// <param name="cookieString" type="string"> /// <para> /// 以String存储的Cookie /// </para> /// </param> /// <param name="domain" type="string"> /// <para> /// Cookie的作用域 /// </para> /// </param> /// <returns> /// A System.Net.CookieContainer value... /// </returns> public CookieContainer SetCookies(string cookieString, string domain) { string[] tempCookies = cookieString.Split(';'); string tempCookie = null; int Equallength = 0;// =的位置 string cookieKey = null; string cookieValue = null; CookieContainer cc = new CookieContainer(); for (int i = 0; i < tempCookies.Length; i++) { if (!string.IsNullOrEmpty(tempCookies[i])) { tempCookie = tempCookies[i]; Equallength = tempCookie.IndexOf("="); if (Equallength != -1) //有可能cookie 无=,就直接一个cookiename;比如:a=3;ck;abc=; { cookieKey = tempCookie.Substring(0, Equallength).Trim(); if (Equallength == tempCookie.Length - 1) //这种是等号后面无值,如:abc=; { cookieValue = ""; } else { cookieValue = tempCookie.Substring(Equallength + 1, tempCookie.Length - Equallength - 1).Trim(); } } else { cookieKey = tempCookie.Trim(); cookieValue = ""; } cookieValue = cookieValue.Replace(",", "%2C");//针对Cookie中的特殊符号','进行转换 cc.Add(new Cookie(cookieKey, cookieValue, "", domain)); } } this.Cookies = cc; return cc; } /// <summary> /// 返回带有 Cookie 的 HttpWebRequest。 /// </summary> /// <param name="address"></param> /// <returns></returns> protected override WebRequest GetWebRequest(Uri address) { WebRequest request = base.GetWebRequest(address); if (request is HttpWebRequest) { HttpWebRequest httpRequest = request as HttpWebRequest; httpRequest.CookieContainer = cookieContainer; } return request; } #region 封装了PostData, GetSrc 和 GetFile 方法 /// <summary> /// 向指定的 URL POST 数据,并返回页面 /// </summary> /// <param name="uriString">POST URL</param> /// <param name="postString">POST 的 数据</param> /// <param name="postStringEncoding">POST 数据的 CharSet</param> /// <param name="dataEncoding">页面的 CharSet</param> /// <returns>页面的源文件</returns> public string PostData(string uriString, string postString, string postStringEncoding, string dataEncoding, out string msg) { try { // 将 Post 字符串转换成字节数组 byte[] postData = Encoding.GetEncoding(postStringEncoding).GetBytes(postString); this.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); // 上传数据,返回页面的字节数组 byte[] responseData = this.UploadData(uriString, "POST", postData); // 将返回的将字节数组转换成字符串(HTML); string srcString = Encoding.GetEncoding(dataEncoding).GetString(responseData); srcString = srcString.Replace("\t", ""); srcString = srcString.Replace("\r", ""); srcString = srcString.Replace("\n", ""); msg = string.Empty; return srcString; } catch (WebException we) { msg = we.Message; return string.Empty; } } /// <summary> /// 获得指定 URL 的源文件 /// </summary> /// <param name="uriString">页面 URL</param> /// <param name="dataEncoding">页面的 CharSet</param> /// <returns>页面的源文件</returns> public string GetSrc(string uriString, string dataEncoding, out string msg) { try { // 返回页面的字节数组 byte[] responseData = this.DownloadData(uriString); // 将返回的将字节数组转换成字符串(HTML); string srcString = Encoding.GetEncoding(dataEncoding).GetString(responseData); srcString = srcString.Replace("\t", ""); srcString = srcString.Replace("\r", ""); srcString = srcString.Replace("\n", ""); msg = string.Empty; return srcString; } catch (WebException we) { msg = we.Message; return string.Empty; } } /// <summary> /// 从指定的 URL 下载文件到本地 /// </summary> /// <param name="uriString">文件 URL</param> /// <param name="fileName">本地文件的完成路径</param> /// <returns></returns> public bool GetFile(string urlString, string fileName, out string msg) { try { this.DownloadFile(urlString, fileName); msg = string.Empty; return true; } catch (WebException we) { msg = we.Message; return false; } } #endregion } }
代码盲飘过。。
楼上搞笑
哈哈
哇,全看懂了。依然飘过。很实用