//调用示例:
/*
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
1<requestdata.length) "?"="" "no-cache");="" (!async)="" (j="-1)" (museproxy)="" (mwp="null)" (read="" (requestmethod.toupper()="POST" )="" );="" +="" 0,="" ;="" alldone.waitone();="" ar)="" ar.asyncstate;="" asynccallback(readcallback),="" asyncresult="" asyncresult)="" break;="" buffer="mRequestEncoding.GetBytes(rs.RequestData.ToString());" buffer.length);="" buffer_size,="" byte[]="" else="" globalproxyselection.select="mWP;" i="j+1;" i);="" iarread="ResponseStream.BeginRead(rs.BufferRead," iasyncresult="" if="" int="" j="RequestData.IndexOfAny(reserved," j-i),mrequestencoding));="" mhwreq="req;" mwp="System.Net.WebProxy.GetDefaultProxy();" new="" newstream="req.GetRequestStream();" newstream.close();="" newstream.write(buffer,="" private="" r="(System.IAsyncResult)" read="responseStream.EndRead(" readcallback(iasyncresult="" req="rs.Request;" req.begingetresponse(new="" req.contentlength="Buffer.Length;" req.contenttype="application/x-www-form-urlencoded" req.credentials="CredentialCache.DefaultCredentials;" req.endgetresponse(ar);="" req.headers.set("pragma",="" req.keepalive="true;" req.method="RequestMethod;" req.timeout="300000;" req.useragent=" [email protected] " requestdata.length-i),mrequestencoding));="" requeststate="" resp="(System.Net.HttpWebResponse)" responsecallback(iasyncresult="" responsestream="rs.ResponseStream;" rs="(RequestState)asyncResult.AsyncState;" rs);="" rs.request="req;" rs.requestdata.append(requestdata.substring(j,1));="" rs.requestdata.append(system.web.httputility.urlencode(requestdata.substring(i,="" rs.requestdata.tostring());="" rs.responsestream="ResponseStream;" stream="" system.asynccallback(responsecallback),="" system.iasyncresult="" system.io.stream="" system.net.httpwebrequest="" system.net.httpwebresponse="" void="" webrequest.create(requesturl="" webrequest.create(requesturl);="" {="" }=""> 0)
2{
3Char[] charBuffer = new Char[BUFFER_SIZE];
4int len = rs.StreamDecode.GetChars( rs.BufferRead, 0, read, charBuffer, 0 );
5System.String str = new System.String( charBuffer, 0, len);
6OnDataArrival(new DataArrivalEventArgs(str,false));
7rs.RequestData.Append(str);
8IAsyncResult ar = responseStream.BeginRead( rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);
9}
10else
11{
12if(rs.RequestData.Length>1)
13{
14string strContent;
15strContent = rs.RequestData.ToString();
16}
17responseStream.Close();
18allDone.Set();
19OnDataArrival(new DataArrivalEventArgs("\n",true));
20}
21return;
22}
23}</requestdata.length)>