C#后台post发送http请求


http协议是在日常开发中使用非常频繁的一种超文本传输协议,http请求有post和get两种常用方式,

get 方法是在向特定的资源发出请求,

post 向指定的资源提交数据进行处理请求(例如提交表单数据或者上传文件),数据会被包裹在消息请求体中,post请求可能hi导致请的资源的建立或已有资源的修改。

  • ET是从服务器上获取数据,POST是向服务器传送数据。
  • GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  • 对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。
  • GET传送的数据量较小,不能大于2KB(这主要是因为受URL长度限制)。POST传送的数据量较大,一般被默认为不受限制。但理论上,限制取决于服务器的处理能力。
  • GET安全性较低,POST安全性较高。因为GET在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。POST的所有操作对用户来说都是不可见的。

在FORM提交的时候,如果不指定Method,则默认为GET请求(.net默认是POST),Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+”号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;GET方式提交的数据最多只能有2048字节,而POST则没有此限制

要想实现http请求需要使用到两个类HttpWebRequest和HttpWebResponse,在C#中就是用这两个类实现客户端向服务器端发送HTTP消息、客户端接受服务器端的HTTP响应。

 

HttpWebRequest这个类 提供了http需要的属性和方法,

 

HttpWebRequest类主要包括如下方法,用于与HTTP服务器交互:

 

HttpWebresponse类用于生成发送的Http请求和接收Http响应。

但是不要直接创建HttpWebResponse类的实例。而应当使用通过调用 HttpWebRequest.GetResponse 所返回的实例。您必须调用 Stream.Close 方法或 HttpWebResponse.Close 方法来关闭响应并将连接释放出来供重用。

HttpWebRequest类主要包括如下方法与HTTP服务器交互:(与HttpWebRequest类相比,方法较少)

 

post请求需要使用form表单的形式提交

/// <summary>
/// 设置密码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void regist_Click(object sender, RoutedEventArgs e)
{

//对数据sys_pass进行加密
MD5 md5 = MD5.Create();
//需要将字符串转成字节数组
byte[] buffer = Encoding.Default.GetBytes(sys_pass);
//加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
byte[] md5buffer = md5.ComputeHash(buffer);
string password = null;
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
foreach (byte b in md5buffer)
{
//得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
//但是在和对方测试过程中,发现我这边的MD5加密编码,经常出现少一位或几位的问题;
//后来分析发现是 字符串格式符的问题, X 表示大写, x 表示小写,
//X2和x2表示不省略首位为0的十六进制数字;
password += b.ToString("x2");
}

 

//简单的表单就是直接将数据拼接起来
string postData = string.Format("phonecode={0}&userphone={1}&type={2}&password={3}",
"", sys_name, 3, password);
string URL = "http://lapi.boyidev.top/loginin";
Post(URL, postData, 3);

}
/// <summary>
/// 指定Post地址使用Get 方式获取全部字符串
/// </summary>
/// <param name="url">请求后台地址</param>
/// <param name="content">Post提交数据内容(utf-8编码的)</param>
/// <returns></returns>
public void Post(string url, string content, int type)
{
string result = "";

//初始创建一个请求实例
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

//指定是post提交方式
req.Method = "POST";

//这里bai的application/x-www-form-urlencoded:是一种编码du格式,窗体数据被编码为名zhi称/值对,是标准的编码格式。

//当action为get时候,dao浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。


req.ContentType = "application/x-www-form-urlencoded";
#region 添加Post 参数
byte[] data = Encoding.UTF8.GetBytes(content);
req.ContentLength = data.Length;

//通过流的方式将数据写入
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
#endregion
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}

}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM