C#下的WebClient保存session和cookie的方法
其實實現方法挺簡單,繼承到WebClient,然後重寫其的相關方法即可了,同時還有針對模擬post提交數據時的編碼問題,也遇到了,在提交發表信息的時候,默認的好像是按照本機語言的默認編碼?還是什麼?具體不大瞭解,中間修改了下,然後針對GBK和UTF-8,測試OK了.保存下,以後或許用的到.
WebClient保存session代碼,重寫類
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
namespace DiscuzPost
{
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>
/// 返回帶有 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;
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Net;
namespace DiscuzPost
{
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>
/// 返回帶有 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;
}
}
}
post數據改變其編碼
using System;
using System.Collections.Generic;
using System.Text;
namespace DiscuzPost
{
class CharSet
{
public static byte[] get(string charset,string str){
byte[] byteArray;
if ("utf-8".Equals(charset.ToLower()))
{
byteArray = Encoding.UTF8.GetBytes(str);
}
else
{
byteArray = Encoding.Default.GetBytes(str);
}
return byteArray;
}
}
}
using System.Collections.Generic;
using System.Text;
namespace DiscuzPost
{
class CharSet
{
public static byte[] get(string charset,string str){
byte[] byteArray;
if ("utf-8".Equals(charset.ToLower()))
{
byteArray = Encoding.UTF8.GetBytes(str);
}
else
{
byteArray = Encoding.Default.GetBytes(str);
}
return byteArray;
}
}
}