王朝网络
分享
 
 
 

C# 写的 HttpRequsetResponse 类,异步、事件... 还热乎着呢!

王朝c#·作者佚名  2006-01-08
宽屏版  字体: |||超大  

//调用示例:

/*

2003-7-1

1.支持Proxy

2.可指定同步或异步

3.一些小修改

*/

private void button1_Click(object sender, System.EventArgs e)

{

HttpRequestResponse xx = new HttpRequestResponse();

xx.DataArrival += new DataArrivalEventHandler(xx_DataArrival);

//xx.SendRequest(@"http://localhost:2080/examples/myservlets/servlet2","message=QQ&desttel=13910911925&mytel=13910081138&mypwd=263996211");

xx.SendRequest(@"http://localhost","message=你好QQ&desttel=13910911925&mytel=13910081138&mypwd=263996211","GET",true);

xx.SendRequest("http://localhost/quickstart/util/srcview.aspx?path=/quickstart/howto/samples/net/WebRequests/clientGETasync.src","post",false);

}

private int i=0;

private void xx_DataArrival(object sender, DataArrivalEventArgs e)

{

Console.WriteLine( i++);

Console.Write(e.RecievedData );

if (e.IsComplete)

{

Console.Write("[" + ((HttpRequestResponse) sender).Request.CookieContainer.GetCookieHeader(((HttpRequestResponse) sender).Response.ResponseUri).ToString() + "]");

}

}

//========================

//Class1.cs

using System;

using System.Net;

using System.Threading;

using System.Text;

using System.IO;

public class RequestState

{

const int BUFFER_SIZE = 1024;

public System.Text.StringBuilder RequestData;

public byte[] BufferRead;

public System.Net.HttpWebRequest Request;

public System.IO.Stream ResponseStream;

public System.Text.Decoder StreamDecode = System.Text.Encoding.GetEncoding("gb2312").GetDecoder();

public RequestState()

{

BufferRead = new byte[BUFFER_SIZE];

RequestData = new System.Text.StringBuilder("");

Request = null;

ResponseStream = null;

}

}

public delegate void DataArrivalEventHandler(object sender, DataArrivalEventArgs e);

public class DataArrivalEventArgs : System.EventArgs

{

private string mRecievedData;

private bool mIsComplete = false;

public DataArrivalEventArgs(string Data,bool Complete)

{

mRecievedData = Data;

mIsComplete = Complete;

}

public string RecievedData

{

get

{

return mRecievedData;

}

}

public bool IsComplete

{

get

{

return mIsComplete;

}

}

}

class HttpRequestResponse

{

public static System.Threading.ManualResetEvent allDone = new System.Threading.ManualResetEvent(false);

const int BUFFER_SIZE = 1024;

public event DataArrivalEventHandler DataArrival;

protected virtual void OnDataArrival(DataArrivalEventArgs e)

{

if (DataArrival != null)

{

DataArrival(this, e);

}

}

private System.Text.Encoding mRequestEncoding = System.Text.Encoding.GetEncoding("gb2312");

private bool mUseProxy = false;

public bool UseProxy

{

get

{

return mUseProxy;

}

set

{

mUseProxy = value;

}

}

private System.Net.WebProxy mWP = System.Net.WebProxy.GetDefaultProxy();

public System.Net.WebProxy Proxy

{

get

{

return mWP;

}

set

{

mWP = value;

}

}

private System.Net.HttpWebRequest mHWReq = null;

public System.Net.HttpWebRequest Request

{

get

{

return mHWReq;

}

}

private System.Net.HttpWebResponse mHWRsp = null;

public System.Net.HttpWebResponse Response

{

get

{

return mHWRsp;

}

}

public void SendRequest(string RequestURL,string RequestData,bool Async)

{

SendRequest(RequestURL,RequestData,"GET",Async);

}

public void SendRequest(string RequestURL,string RequestData,string RequestMethod,bool Async)

{

HttpWebRequest req;

RequestState rs = new RequestState();

if (RequestData != null)

{

int i=0, j;

Char[] reserved = {'?', '=', '&'};

while(i<RequestData.Length)

{

j=RequestData.IndexOfAny(reserved, i);

if (j==-1)

{

rs.RequestData.Append(System.Web.HttpUtility.UrlEncode(RequestData.Substring(i, RequestData.Length-i),mRequestEncoding));

break;

}

rs.RequestData.Append(System.Web.HttpUtility.UrlEncode(RequestData.Substring(i, j-i),mRequestEncoding));

rs.RequestData.Append(RequestData.Substring(j,1));

i = j+1;

}

}

if (RequestMethod.ToUpper() == "POST")

{

byte[] Buffer = null;

Buffer = mRequestEncoding.GetBytes(rs.RequestData.ToString());

req =(HttpWebRequest) WebRequest.Create(RequestURL);

req.ContentLength = Buffer.Length;

req.Method = RequestMethod;

req.ContentType = "application/x-www-form-urlencoded";

Stream newStream = req.GetRequestStream();

newStream.Write(Buffer, 0, Buffer.Length);

newStream.Close();

}

else

{

req =(HttpWebRequest) WebRequest.Create(RequestURL + "?" + rs.RequestData.ToString());

}

req.Credentials = CredentialCache.DefaultCredentials;

req.UserAgent = "playyuer@Microshaoft.com";

req.KeepAlive = true;

req.Headers.Set("Pragma", "no-cache");

req.Timeout = 300000;

if (mUseProxy)

{

if (mWP == null)

mWP = System.Net.WebProxy.GetDefaultProxy();

GlobalProxySelection.Select = mWP;

}

rs.Request = req;

mHWReq = req;

System.IAsyncResult r = (System.IAsyncResult) req.BeginGetResponse(new System.AsyncCallback(ResponseCallback), rs);

if (!Async)

allDone.WaitOne();

}

private void ResponseCallback(IAsyncResult ar)

{

RequestState rs = (RequestState) ar.AsyncState;

System.Net.HttpWebRequest req = rs.Request;

System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse) req.EndGetResponse(ar);

System.IO.Stream ResponseStream = resp.GetResponseStream();

rs.ResponseStream = ResponseStream;

IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);

}

private void ReadCallBack(IAsyncResult asyncResult)

{

RequestState rs = (RequestState)asyncResult.AsyncState;

System.IO.Stream responseStream = rs.ResponseStream;

int read = responseStream.EndRead( asyncResult );

if (read > 0)

{

Char[] charBuffer = new Char[BUFFER_SIZE];

int len = rs.StreamDecode.GetChars( rs.BufferRead, 0, read, charBuffer, 0 );

System.String str = new System.String( charBuffer, 0, len);

OnDataArrival(new DataArrivalEventArgs(str,false));

rs.RequestData.Append(str);

IAsyncResult ar = responseStream.BeginRead( rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);

}

else

{

if(rs.RequestData.Length>1)

{

string strContent;

strContent = rs.RequestData.ToString();

}

responseStream.Close();

allDone.Set();

OnDataArrival(new DataArrivalEventArgs("\n",true));

}

return;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有