1、发送端
using System.Net;
using System.Text;
using System.IO;
// Prepare web request
//string url="http://localhost:5814/WebSite1/Default2.aspx"
string url = "http://localhost:10209/10、传递参数/httpWebRequest2.aspx";
// 创建 WebRequest 对象,WebRequest 是抽象类,定义了请求的规定,
// 可以用于各种请求,例如:Http, Ftp 等等。
// HttpWebRequest 是 WebRequest 的派生类,专门用于 Http
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
// 请求的方式通过 Method 属性设置 ,默认为 GET
// 可以将 Method 属性设置为任何 HTTP 1.1 协议谓词:GET、HEAD、POST、PUT、DELETE、TRACE 或 OPTIONS。
myRequest.Method = "POST";
// 拼接成请求参数串,并进行编码,成为字节
string strId = "jaer";
string strPassword = "123456";
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "userid=" + strId;
postData += "&password=" + strPassword;
byte[] data = encoding.GetBytes(postData);
// 设置请求的参数形式
myRequest.ContentType = "application/x-www-form-urlencoded";
// 设置请求参数的长度.
myRequest.ContentLength = data.Length;
// 取得发向服务器的流
Stream newStream = myRequest.GetRequestStream();
// Send the data.
// 取得发向服务器的流
newStream.Write(data, 0, data.Length);
// 完成后,关闭请求流.
newStream.Close();
// Get response
// GetResponse 方法才真的发送请求,等待服务器返回
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
// 然后可以得到以流的形式表示的回应内容
Stream receiveStream=myResponse.GetResponseStream();
// 还可以将字节流包装为高级的字符流,以便于读取文本内容
// 需要注意编码
StreamReader reader = new StreamReader(receiveStream, Encoding.Default);
string content = reader.ReadToEnd();
Response.Write(content);
// 完成后要关闭字符流,字符流底层的字节流将会自动关闭
myResponse.Close();
receiveStream.Close();
2、 接收端:
string ID = Request.Form["userid"].ToString();
string password = Request.Form["password"].ToString();
if (ID == "jaer" && password == "123456")
{
Response.Write(200);
//Response.Write("啊啊啊");
}
说明: 发送的是两个参数,没有过多的处理。
对于发送端的各种过冲介绍的比较清楚。
WebRequest 使用的基本思路:
(1) WebRequest 是即一个虚类,使用的时候要具体实例化,分为http对象和ftp对象,这是两种传输格式。
(2)HttpWebRequest 具体传送的是二进制流,所以要对传输的信息进行编码、转换
ASCIIEncoding encoding = new ASCIIEncoding(); ---编码方式
byte[] data = encoding.GetBytes(postData); --字符串编码为数组
Stream newStream = myRequest.GetRequestStream();--设定流
newStream.Write(data, 0, data.Length);)--- 将数据填充到流
为了能够正确的解析二进制流,流头部具有规定的格式说明:
(3)设定好了,把流发出去就可以了。
// Send the data.
// 取得发向服务器的流
newStream.Write(data, 0, data.Length);
// 完成后,关闭请求流.
newStream.Close();
// Get response
// GetResponse 方法才真的发送请求,等待服务器返回
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
疑问:到底是哪个发送的?没有发送之前就能把流给关闭了?流发送的,但是只是填写了流的内容,流就调用HttpWebRequest进行发送了,不能啊????