//调用示例:
private void button1_Click(object sender, System.EventArgs e)
{
HttpRequestResponse xx = new HttpRequestResponse();
xx.DataArrival += new DataArrivalEventHandler(xx_DataArrival);
xx.SendRequest("http://www.triaton.com.cn/dotnet/tree/index.asp","userid=老","Post");
xx.SendRequest("http://www.triaton.com.cn/dotnet/tree/index.asp","userid=老","get");
} private void xx_DataArrival(object sender, DataArrivalEventArgs e)
{
Console.WriteLine(e.RecievedData);
Console.WriteLine(e.IsComplete);
}
//========================
//Class1.cs
using System;
using ;
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 .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");
public void SendRequest(string RequestURL,string RequestData,string RequestMethod)
{
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());
}rs.Request = req;
System.IAsyncResult r = (System.IAsyncResult) req.BeginGetResponse(new System.AsyncCallback(ResponseCallback), rs);
}private void ResponseCallback(IAsyncResult ar)
{
RequestState rs = (RequestState) ar.AsyncState;.HttpWebRequest req = rs.Request;
.HttpWebResponse resp = (.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();
OnDataArrival(new DataArrivalEventArgs("\n",true));
allDone.Set();
}
return;
}}
//================================
//调用示例
//再贴一个 Socket 编的
private void button1_Click(object sender, System.EventArgs e)
{
(new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
(new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
(new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
(new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
(new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
(new WindowsApplication1.HttpRequestResponse()).SendRequestAndGetResponse();
System.Windows.Forms.MessageBox.Show ("send end") ;}
//很久(去年)以前写的 Socket 级的 Class1.cs
using System;/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class HttpRequestResponse
{
private System.Text.StringBuilder SB = new System.Text.StringBuilder();
private string sReq;
private byte[] buffer = new byte[1024];
private int index = 0;
private static int Count =0;
//public delegate SendRequestAndGetResponse
public HttpRequestResponse()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void SendRequestAndGetResponse()
{
string sHost = "triatonweb";
int iPort = 80;
string sReqItem = "游客";
sReqItem = "uid=" + System.Web.HttpUtility.UrlEncode(sReqItem,System.Text.Encoding.GetEncoding("GB2312"));
sReq="userid=" + System.Web.HttpUtility.UrlEncode("游客",System.Text.Encoding.GetEncoding("GB2312"))
+ "&dest_tel=13910081138"
+ "&mytel=13910081138"
+ "&mypwd=asdada";
string CGI = "dotnet/tree/index.asp";
sReq = "POST /" + CGI + " HTTP/1.1\n"
+ "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\n"
+ "Accept-Language: zh-cn\n"
+ "Content-Type: application/x-www-form-urlencoded\n"
+ "Accept-Encoding: gzip, deflate\n"
+ "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)\n"
+ "Host: " + sHost + ":" + System.Convert.ToString(iPort) + "\n"
+ "Content-Length: " + System.Convert.ToString(sReqItem.Length) + "\n"
+ "Connection: Keep-Alive\n"
+ "Cache-Control: no-cache\n\n"
+ sReq;.Sockets.Socket Skt = new .Sockets.Socket(.Sockets.AddressFamily.InterNetwork,.Sockets.SocketType.Stream,.Sockets.ProtocolType.Tcp);
index = ++Count;
Skt.BeginConnect(new .IPEndPoint(.Dns.Resolve(sHost).AddressList[0], 80),
new System.AsyncCallback (this.BeginConnectAsyncCallback),Skt);
System.Console.WriteLine("Socket[" + index.ToString() + "] 开始连接: {0}",Skt.RemoteEndPoint.ToString()); }
private void BeginConnectAsyncCallback(System.IAsyncResult IAR)
{
// try
// {
.Sockets.Socket Skt = (.Sockets.Socket) IAR.AsyncState;
Skt.EndConnect(IAR);System.Console.WriteLine("Socket[" + index.ToString() + "] 已连接到: {0}",Skt.RemoteEndPoint.ToString());
buffer =System.Text.Encoding.GetEncoding("GB2312").GetBytes(sReq) ;
Skt.BeginSend(buffer,0,buffer.Length,.Sockets.SocketFlags.None,new System.AsyncCallback (this.BeginSendAsyncCallback) ,Skt);
System.Console.WriteLine("Socket[" + index.ToString() + "] 开始发送: {1} Bytes 数据,到 IP: {0} ",Skt.RemoteEndPoint.ToString(),buffer.Length.ToString() );
// }
// catch (Exception e)
// {
// Console.WriteLine(e.ToString());
// }
}
private void BeginSendAsyncCallback(System.IAsyncResult IAR)
{
// try
// {
.Sockets.Socket Skt = (.Sockets.Socket) IAR.AsyncState;
Skt.EndSend(IAR);
System.Console.WriteLine("Socket[" + index.ToString() + "] 发送完毕");
//byte[] buffer = new byte[1024];
Skt.BeginReceive(buffer,0,buffer.Length,.Sockets.SocketFlags.None,new System.AsyncCallback(this.BeginRecieveAsyncCallback),Skt);
System.Console.WriteLine("Socket[" + index.ToString() + "] 开始接收数据,从 IP: {0}",Skt.RemoteEndPoint.ToString()); // }
// catch (Exception e)
// {
// Console.WriteLine(e.ToString());
// }
} private void BeginRecieveAsyncCallback(System.IAsyncResult IAR)
{
// try
// {
.Sockets.Socket Skt = (.Sockets.Socket) IAR.AsyncState;
int i =Skt.EndReceive(IAR);if (i>0)
{
//buffer.Length = i;
SB.Append("" + System.Text.Encoding.GetEncoding("GB2312").GetString(buffer,0,i));
Skt.BeginReceive(buffer,0,buffer.Length,.Sockets.SocketFlags.None,new System.AsyncCallback(this.BeginRecieveAsyncCallback),Skt);
System.Console.WriteLine("Socket[" + index.ToString() + "] 已接收 {1} 字节数据,从 IP: {0}",Skt.RemoteEndPoint.ToString(),buffer.Length.ToString() );
Console.WriteLine(System.Text.Encoding.GetEncoding("GB2312").GetString(buffer,0,i) );
}
else
{
Skt.Close();
Skt = null;
Console.WriteLine(SB.ToString());
} //Skt.BeginReceive
// }
// catch (Exception e)
// {
// Console.WriteLine(e.ToString());
// }
}}C#Post方法1
原创
©著作权归作者所有:来自51CTO博客作者biyusr216的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:C#Post方式2
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C#Post方式2
你可以将UTF8换成你需要的编码方式。如果你不通过代理服务器。
c# 服务器 前端 Text System -
java socket POST (1)
本文讲述了如何使用java程序发送 POST/GET http请求,并获得请求的反馈结果。
java http socket POST GET -
c#POST请求php接口
POST请求php接口
i++ php post请求 字符串 其他
















