C#客戶端發送Http請求與服務端通信


原文地址: https://blog.csdn.net/Sayesan/article/details/78794081?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-3.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-3.nonecase

 

C#客戶端發送Http請求與服務端通信

環境介紹

1.軟件 vs2013 
2. 編程語言c# winform 
3. 服務端采用java+spring,restful風格

在客戶端,通過HttpWebRequest方法,向服務端發送get,post,put和delete請求,但是由於服務端的接收參數不同,以及在具體請求下有稍微的不同,故分為以下幾種情況(本文所有代碼均為底層接口的形式給出,可以直接被上層具體方法調用)

1.GET請求,服務端接收參數方式為@RequestParam

get請求接收參數的方式通常均為@RequestParam,此時,請求參數實際上是以 “url?param1=xx&param2=xx”的形式傳遞的,所以代碼如下

  1.  
    //url為請求的網址,param參數為需要查詢的條件(服務端接收的參數,沒有則為null)
  2.  
    //返回該次請求的響應
  3.  
    public string GET(string url,Dictionary<String,String> param)
  4.  
    {
  5.  
    if(param!= null) //有參數的情況下,拼接url
  6.  
    {
  7.  
    url = url + "?";
  8.  
    foreach ( var item in param)
  9.  
    {
  10.  
    url = url + item.Key + "=" + item.Value+ "&";
  11.  
    }
  12.  
    url = url.Substring( 0, url.Length - 1);
  13.  
    }
  14.  
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
  15.  
    request.Method = "GET"; //請求方法為GET
  16.  
    HttpWebResponse res; //定義返回的response
  17.  
    try
  18.  
    {
  19.  
    res = (HttpWebResponse)request.GetResponse(); //此處發送了請求並獲得響應
  20.  
    }
  21.  
    catch (WebException ex)
  22.  
    {
  23.  
    res = (HttpWebResponse)ex.Response;
  24.  
    }
  25.  
    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
  26.  
    string content = sr.ReadToEnd(); //響應轉化為String字符串
  27.  
    return content;
  28.  
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

2.POST(PUT)請求,服務端接收參數方式為@RequestParam

當在post或者put請求以@RequestParam接收參數時,實際提交參數的形式是類似於表單提交,這種情況下,每一個提交的參數前都需要添加boundary,用於將不同的參數分開,具體的提交方式可以參考我的另一篇文章:C#上傳文件到服務端(http://blog.csdn.net/pinebud55/article/details/52182217

3.POST(PUT)請求,服務端接收參數方式為@RequestBody

對於post請求,除非上傳文件的特殊情況,否則我們推薦服務端以requestbody形式接收參數,因為在需要接受的參數較多時,代碼可以更加簡潔,並且不再需要后期增加接收的參數,body即包含了一個對象所有的屬性。

言歸正傳,這種情況的處理是最理想的,只需要將需要提交的參數以json的方式提交即可,代碼如下:

  1.  
    //url為請求的網址,param為需要傳遞的參數
  2.  
    //返回服務端的額響應
  3.  
    public string POST(string url, Dictionary<String, String> param)
  4.  
    {
  5.  
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
  6.  
    CookieContainer cookieContainer = new CookieContainer();
  7.  
    request.CookieContainer = cookieContainer;
  8.  
    request.AllowAutoRedirect = true;
  9.  
    //request.AllowReadStreamBuffering = true;
  10.  
    request.MaximumResponseHeadersLength = 1024;
  11.  
    request.Method = "POST"; //請求方式為post
  12.  
    request.AllowAutoRedirect = true;
  13.  
    request.MaximumResponseHeadersLength = 1024;
  14.  
    request.ContentType = "application/json";
  15.  
    JObject json = new JObject();
  16.  
    if(param.Count!= 0) //將參數添加到json對象中
  17.  
    {
  18.  
    foreach( var item in param)
  19.  
    {
  20.  
    json.Add(item.Key, item.Value);
  21.  
    }
  22.  
    }
  23.  
    string jsonstring = json.ToString(); //獲得參數的json字符串
  24.  
    byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
  25.  
    Stream postStream = request.GetRequestStream();
  26.  
    postStream.Write(jsonbyte, 0, jsonbyte.Length);
  27.  
    postStream.Close();
  28.  
    //發送請求並獲取相應回應數據
  29.  
    HttpWebResponse res;
  30.  
    try
  31.  
    {
  32.  
    res = (HttpWebResponse)request.GetResponse();
  33.  
    }
  34.  
    catch (WebException ex)
  35.  
    {
  36.  
    res = (HttpWebResponse)ex.Response;
  37.  
    }
  38.  
    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
  39.  
    string content = sr.ReadToEnd(); //獲得響應字符串
  40.  
    return content;
  41.  

C#客戶端發送Http請求與服務端通信

環境介紹

1.軟件 vs2013 
2. 編程語言c# winform 
3. 服務端采用java+spring,restful風格

在客戶端,通過HttpWebRequest方法,向服務端發送get,post,put和delete請求,但是由於服務端的接收參數不同,以及在具體請求下有稍微的不同,故分為以下幾種情況(本文所有代碼均為底層接口的形式給出,可以直接被上層具體方法調用)

1.GET請求,服務端接收參數方式為@RequestParam

get請求接收參數的方式通常均為@RequestParam,此時,請求參數實際上是以 “url?param1=xx&param2=xx”的形式傳遞的,所以代碼如下

  1.  
    //url為請求的網址,param參數為需要查詢的條件(服務端接收的參數,沒有則為null)
  2.  
    //返回該次請求的響應
  3.  
    public string GET(string url,Dictionary<String,String> param)
  4.  
    {
  5.  
    if(param!= null) //有參數的情況下,拼接url
  6.  
    {
  7.  
    url = url + "?";
  8.  
    foreach ( var item in param)
  9.  
    {
  10.  
    url = url + item.Key + "=" + item.Value+ "&";
  11.  
    }
  12.  
    url = url.Substring( 0, url.Length - 1);
  13.  
    }
  14.  
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
  15.  
    request.Method = "GET"; //請求方法為GET
  16.  
    HttpWebResponse res; //定義返回的response
  17.  
    try
  18.  
    {
  19.  
    res = (HttpWebResponse)request.GetResponse(); //此處發送了請求並獲得響應
  20.  
    }
  21.  
    catch (WebException ex)
  22.  
    {
  23.  
    res = (HttpWebResponse)ex.Response;
  24.  
    }
  25.  
    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
  26.  
    string content = sr.ReadToEnd(); //響應轉化為String字符串
  27.  
    return content;
  28.  
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

2.POST(PUT)請求,服務端接收參數方式為@RequestParam

當在post或者put請求以@RequestParam接收參數時,實際提交參數的形式是類似於表單提交,這種情況下,每一個提交的參數前都需要添加boundary,用於將不同的參數分開,具體的提交方式可以參考我的另一篇文章:C#上傳文件到服務端(http://blog.csdn.net/pinebud55/article/details/52182217

3.POST(PUT)請求,服務端接收參數方式為@RequestBody

對於post請求,除非上傳文件的特殊情況,否則我們推薦服務端以requestbody形式接收參數,因為在需要接受的參數較多時,代碼可以更加簡潔,並且不再需要后期增加接收的參數,body即包含了一個對象所有的屬性。

言歸正傳,這種情況的處理是最理想的,只需要將需要提交的參數以json的方式提交即可,代碼如下:

  1.  
    //url為請求的網址,param為需要傳遞的參數
  2.  
    //返回服務端的額響應
  3.  
    public string POST(string url, Dictionary<String, String> param)
  4.  
    {
  5.  
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
  6.  
    CookieContainer cookieContainer = new CookieContainer();
  7.  
    request.CookieContainer = cookieContainer;
  8.  
    request.AllowAutoRedirect = true;
  9.  
    //request.AllowReadStreamBuffering = true;
  10.  
    request.MaximumResponseHeadersLength = 1024;
  11.  
    request.Method = "POST"; //請求方式為post
  12.  
    request.AllowAutoRedirect = true;
  13.  
    request.MaximumResponseHeadersLength = 1024;
  14.  
    request.ContentType = "application/json";
  15.  
    JObject json = new JObject();
  16.  
    if(param.Count!= 0) //將參數添加到json對象中
  17.  
    {
  18.  
    foreach( var item in param)
  19.  
    {
  20.  
    json.Add(item.Key, item.Value);
  21.  
    }
  22.  
    }
  23.  
    string jsonstring = json.ToString(); //獲得參數的json字符串
  24.  
    byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
  25.  
    Stream postStream = request.GetRequestStream();
  26.  
    postStream.Write(jsonbyte, 0, jsonbyte.Length);
  27.  
    postStream.Close();
  28.  
    //發送請求並獲取相應回應數據
  29.  
    HttpWebResponse res;
  30.  
    try
  31.  
    {
  32.  
    res = (HttpWebResponse)request.GetResponse();
  33.  
    }
  34.  
    catch (WebException ex)
  35.  
    {
  36.  
    res = (HttpWebResponse)ex.Response;
  37.  
    }
  38.  
    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
  39.  
    string content = sr.ReadToEnd(); //獲得響應字符串
  40.  
    return content;
  41.  
    }
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM