C#客戶端發送Http請求與服務端通信
環境介紹
1.軟件 vs2013
2. 編程語言c# winform
3. 服務端采用java+spring,restful風格
在客戶端,通過HttpWebRequest方法,向服務端發送get,post,put和delete請求,但是由於服務端的接收參數不同,以及在具體請求下有稍微的不同,故分為以下幾種情況(本文所有代碼均為底層接口的形式給出,可以直接被上層具體方法調用)
1.GET請求,服務端接收參數方式為@RequestParam
get請求接收參數的方式通常均為@RequestParam,此時,請求參數實際上是以 “url?param1=xx¶m2=xx”的形式傳遞的,所以代碼如下
-
//url為請求的網址,param參數為需要查詢的條件(服務端接收的參數,沒有則為null)
-
//返回該次請求的響應
-
public string GET(string url,Dictionary<String,String> param)
-
{
-
if(param!= null) //有參數的情況下,拼接url
-
{
-
url = url + "?";
-
foreach ( var item in param)
-
{
-
url = url + item.Key + "=" + item.Value+ "&";
-
}
-
url = url.Substring( 0, url.Length - 1);
-
}
-
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
-
request.Method = "GET"; //請求方法為GET
-
HttpWebResponse res; //定義返回的response
-
try
-
{
-
res = (HttpWebResponse)request.GetResponse(); //此處發送了請求並獲得響應
-
}
-
catch (WebException ex)
-
{
-
res = (HttpWebResponse)ex.Response;
-
}
-
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
-
string content = sr.ReadToEnd(); //響應轉化為String字符串
-
return content;
-
}
- 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的方式提交即可,代碼如下:
-
//url為請求的網址,param為需要傳遞的參數
-
//返回服務端的額響應
-
public string POST(string url, Dictionary<String, String> param)
-
{
-
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
-
CookieContainer cookieContainer = new CookieContainer();
-
request.CookieContainer = cookieContainer;
-
request.AllowAutoRedirect = true;
-
//request.AllowReadStreamBuffering = true;
-
request.MaximumResponseHeadersLength = 1024;
-
request.Method = "POST"; //請求方式為post
-
request.AllowAutoRedirect = true;
-
request.MaximumResponseHeadersLength = 1024;
-
request.ContentType = "application/json";
-
JObject json = new JObject();
-
if(param.Count!= 0) //將參數添加到json對象中
-
{
-
foreach( var item in param)
-
{
-
json.Add(item.Key, item.Value);
-
}
-
}
-
string jsonstring = json.ToString(); //獲得參數的json字符串
-
byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
-
Stream postStream = request.GetRequestStream();
-
postStream.Write(jsonbyte, 0, jsonbyte.Length);
-
postStream.Close();
-
//發送請求並獲取相應回應數據
-
HttpWebResponse res;
-
try
-
{
-
res = (HttpWebResponse)request.GetResponse();
-
}
-
catch (WebException ex)
-
{
-
res = (HttpWebResponse)ex.Response;
-
}
-
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
-
string content = sr.ReadToEnd(); //獲得響應字符串
-
return content;
-
C#客戶端發送Http請求與服務端通信
環境介紹
1.軟件 vs2013
2. 編程語言c# winform
3. 服務端采用java+spring,restful風格
在客戶端,通過HttpWebRequest方法,向服務端發送get,post,put和delete請求,但是由於服務端的接收參數不同,以及在具體請求下有稍微的不同,故分為以下幾種情況(本文所有代碼均為底層接口的形式給出,可以直接被上層具體方法調用)
1.GET請求,服務端接收參數方式為@RequestParam
get請求接收參數的方式通常均為@RequestParam,此時,請求參數實際上是以 “url?param1=xx¶m2=xx”的形式傳遞的,所以代碼如下
-
//url為請求的網址,param參數為需要查詢的條件(服務端接收的參數,沒有則為null)
-
//返回該次請求的響應
-
public string GET(string url,Dictionary<String,String> param)
-
{
-
if(param!= null) //有參數的情況下,拼接url
-
{
-
url = url + "?";
-
foreach ( var item in param)
-
{
-
url = url + item.Key + "=" + item.Value+ "&";
-
}
-
url = url.Substring( 0, url.Length - 1);
-
}
-
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
-
request.Method = "GET"; //請求方法為GET
-
HttpWebResponse res; //定義返回的response
-
try
-
{
-
res = (HttpWebResponse)request.GetResponse(); //此處發送了請求並獲得響應
-
}
-
catch (WebException ex)
-
{
-
res = (HttpWebResponse)ex.Response;
-
}
-
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
-
string content = sr.ReadToEnd(); //響應轉化為String字符串
-
return content;
-
}
- 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的方式提交即可,代碼如下:
-
//url為請求的網址,param為需要傳遞的參數
-
//返回服務端的額響應
-
public string POST(string url, Dictionary<String, String> param)
-
{
-
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //創建請求
-
CookieContainer cookieContainer = new CookieContainer();
-
request.CookieContainer = cookieContainer;
-
request.AllowAutoRedirect = true;
-
//request.AllowReadStreamBuffering = true;
-
request.MaximumResponseHeadersLength = 1024;
-
request.Method = "POST"; //請求方式為post
-
request.AllowAutoRedirect = true;
-
request.MaximumResponseHeadersLength = 1024;
-
request.ContentType = "application/json";
-
JObject json = new JObject();
-
if(param.Count!= 0) //將參數添加到json對象中
-
{
-
foreach( var item in param)
-
{
-
json.Add(item.Key, item.Value);
-
}
-
}
-
string jsonstring = json.ToString(); //獲得參數的json字符串
-
byte[] jsonbyte = Encoding.UTF8.GetBytes(jsonstring);
-
Stream postStream = request.GetRequestStream();
-
postStream.Write(jsonbyte, 0, jsonbyte.Length);
-
postStream.Close();
-
//發送請求並獲取相應回應數據
-
HttpWebResponse res;
-
try
-
{
-
res = (HttpWebResponse)request.GetResponse();
-
}
-
catch (WebException ex)
-
{
-
res = (HttpWebResponse)ex.Response;
-
}
-
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
-
string content = sr.ReadToEnd(); //獲得響應字符串
-
return content;
-
}