zoukankan      html  css  js  c++  java
  • C# winform 请求http ( get , post 两种方式 )

    一:.Net中有两个类 HttpWebRequest 和HttpWebResponse 类来实现Http的请求

    实现步骤:

    1.通过WebRequest类创建一个HttpWebRequest的对象,该对象可以包含Http请求信息。
    2.设置HttpWebRequest对象,其实就是设置Http请求报文的信息内容。
    3.从HttpWebRequest对象中获取HttpWebResponse对象,该对象包含Http响应信息。
    4.从响应信息中获取响应头信息和响应主体信息。

    二: HTTP定义了与服务器交互的不同方法

    基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删。一般情况下我们只用到GET和POST.

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

     

    两个简单的Get请求和Post请求

    1.Get请求

    1. string strURL = "http://localhost/WinformSubmit.php?tel=11111&name=张三";  
    2. System.Net.HttpWebRequest request;  
    3. // 创建一个HTTP请求  
    4. request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);  
    5. //request.Method="get";  
    6. System.Net.HttpWebResponse response;  
    7. response = (System.Net.HttpWebResponse)request.GetResponse();  
    8. System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);  
    9. string responseText = myreader.ReadToEnd();  
    10. myreader.Close();  
    11. MessageBox.Show(responseText);  

    2.Post请求

    1. string strURL = "http://localhost/WinformSubmit.php";  
    2. System.Net.HttpWebRequest request;  
    3. request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);  
    4. //Post请求方式  
    5. request.Method = "POST";  
    6. // 内容类型  
    7. request.ContentType = "application/x-www-form-urlencoded";  
    8. // 参数经过URL编码  
    9. string paraUrlCoded = System.Web.HttpUtility.UrlEncode("keyword");  
    10. paraUrlCoded += "=" + System.Web.HttpUtility.UrlEncode("多月");  
    11. byte[] payload;  
    12. //将URL编码后的字符串转化为字节  
    13. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);  
    14. //设置请求的 ContentLength   
    15. request.ContentLength = payload.Length;  
    16. //获得请 求流  
    17. System.IO.Stream writer = request.GetRequestStream();  
    18. //将请求参数写入流  
    19. writer.Write(payload, 0, payload.Length);  
    20. // 关闭请求流  
    21. writer.Close();  
    22. System.Net.HttpWebResponse response;  
    23. // 获得响应流  
    24. response = (System.Net.HttpWebResponse)request.GetResponse();  
    25. System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);  
    26. string responseText = myreader.ReadToEnd();  
    27. myreader.Close();  
    28. MessageBox.Show(responseText);  

     

    一个小测试

    请求百度首页( http://www.baidu.com )的内容,也就是要获得百度首页的html内容。

    创建HttpWebRequest请求,设置请求报文信息

    1.  //请求  
    2. string uri = http://www.baidu.com;  
    3. HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;  
    4. request.Method = "GET";                            //请求方法  
    5. request.ProtocolVersion = new Version(1, 1);   //Http/1.1版本  
    6. //Add Other ...  


    接收响应,输出响应头部信息以及主体信息

    1. HttpWebResponse response=request.GetResponse() as HttpWebResponse;  
    2.    //Header  
    3.    foreach (var item in response.Headers)     
    4.   {  
    5.      this.txt_Header.Text += item.ToString()+": " +     
    6.      response.GetResponseHeader  (item.ToString())  
    7.      + System.Environment.NewLine;  
    8.   }  
    9.    
    10.     //如果主体信息不为空,则接收主体信息内容  
    11.    if (response.ContentLength <= 0)  
    12.       return;  
    13.    //接收响应主体信息  
    14.    using(Stream stream =response.GetResponseStream())  
    15.    {  
    16.      int totalLength=(int)response.ContentLength;  
    17.      int numBytesRead=0;  
    18.      byte[] bytes=new byte[totalLength+1024];  
    19.     //通过一个循环读取流中的数据,读取完毕,跳出循环  
    20.      while( numBytesRead < totalLength  )  
    21.      {  
    22.       int num=stream.Read(bytes,numBytesRead,1024);  //每次希望读取1024字节  
    23.       if( num==0 )   //说明流中数据读取完毕  
    24.         break;  
    25.       numBytesRead+=num;  
    26.      }  
    27.    
    28.  }  
    29.    //将接收到的主体数据显示到界面  
    30.    string content=Encoding.UTF8.GetString(bytes);  
    31.    this.txt_Content.Text=content;  
  • 相关阅读:
    UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
    UVa 1658 (拆点法 最小费用流) Admiral
    UVa 11082 (网络流建模) Matrix Decompressing
    UVa 753 (二分图最大匹配) A Plug for UNIX
    UVa 1451 (数形结合 单调栈) Average
    UVa 1471 (LIS变形) Defense Lines
    UVa 11572 (滑动窗口) Unique Snowflakes
    UVa 1606 (极角排序) Amphiphilic Carbon Molecules
    UVa 11054 Wine trading in Gergovia
    UVa 140 (枚举排列) Bandwidth
  • 原文地址:https://www.cnblogs.com/lgx5/p/8184703.html
Copyright © 2011-2022 走看看