1. 程式人生 > 實用技巧 >winform——POST訪問http介面

winform——POST訪問http介面

一、post請求

提交和返回資料都為json格式

統一採用UTF-8字元編碼

 1   public string Post(string Url, string jsonParas)
 2         {
 3             string strURL = Url;
 4             //建立一個HTTP請求  
 5             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
 6             //Post請求方式  
 7             request.Method = "
POST"; 8 //內容型別 9 request.ContentType = "application/x-www-form-urlencoded"; 10 11 //設定引數,並進行URL編碼 12 13 string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas); 14 15 byte[] payload; 16 //將Json字串轉化為位元組 17
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); 18 //設定請求的ContentLength 19 request.ContentLength = payload.Length; 20 //傳送請求,獲得請求流 21 22 Stream writer; 23 try 24 { 25 writer = request.GetRequestStream();//
獲取用於寫入請求資料的Stream物件 26 } 27 catch (Exception) 28 { 29 writer = null; 30 Console.Write("連線伺服器失敗!"); 31 } 32 //將請求引數寫入流 33 writer.Write(payload, 0, payload.Length); 34 writer.Close();//關閉請求流 35 // String strValue = "";//strValue為http響應所返回的字元流 36 HttpWebResponse response; 37 try 38 { 39 //獲得響應流 40 response = (HttpWebResponse)request.GetResponse(); 41 } 42 catch (WebException ex) 43 { 44 response = ex.Response as HttpWebResponse; 45 } 46 Stream s = response.GetResponseStream(); 47 // Stream postData = Request.InputStream; 48 StreamReader sRead = new StreamReader(s); 49 string postContent = sRead.ReadToEnd(); 50 sRead.Close(); 51 return postContent;//返回Json資料 52 }
 1 /// <summary>
 2         /// POST資料到指定地址
 3         /// </summary>
 4         /// <param name="url"></param>
 5         /// <param name="encoding"></param>
 6         /// <param name="data"></param>
 7         /// <returns></returns>
 8         public static string PostDataToUrl(string url, System.Text.Encoding encoding, System.Collections.Specialized.NameValueCollection data)
 9         {
10             //設定HttpWebRequest
11             System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(url));
12             request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
13             request.ContentType = "application/x-www-form-urlencoded";
14             request.Method = "POST";
15             request.KeepAlive = false;
16 
17             byte[] buffer;
18             using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
19             {
20                 for (int i = 0; i < data.Count; i++)
21                 {
22                     buffer = encoding.GetBytes(data.Keys[i]);
23                     if (i > 0)
24                         ms.WriteByte(Convert.ToByte('&'));
25                     ms.Write(buffer, 0, buffer.Length);
26                     ms.WriteByte(Convert.ToByte('='));
27                     buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i]));
28                     ms.Write(buffer, 0, buffer.Length);
29                 }
30                 buffer = ms.ToArray();
31             }
32 
33             request.ContentLength = buffer.Length;
34             using (
35                 
36                 
37                 System.IO.Stream requestStream = request.GetRequestStream())
38             {
39                 requestStream.Write(buffer, 0, buffer.Length);
40                 requestStream.Close();
41             }
42 
43             try
44             {
45                 //獲取資料
46                 using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)(request.GetResponse()))
47                 using (System.IO.Stream stream = response.GetResponseStream())
48                 using (System.IO.StreamReader reader = new System.IO.StreamReader(stream, encoding))
49                 {
50                     string result = reader.ReadToEnd();
51                     reader.Close();
52                     stream.Close();
53                     response.Close();
54                     return result;
55                 }
56             }
57             finally
58             {
59                 request.Abort();
60             }
61         }
62 
63    呼叫方法:
64       Byte[] bytes = Encoding.UTF8.GetBytes(msg);
65             //轉換成Base64字串
66             msg = BytesToBase64(bytes);
67             string encodeMsgs = System.Web.HttpUtility.UrlEncode(msg);//urlencode編碼
68             NameValueCollection vc = new NameValueCollection();
69             vc.Add("sid", sid);
70             vc.Add("mobi", mobi);
71             vc.Add("sign", sign);
72             vc.Add("msg", encodeMsgs);  

 1    /// <summary>
 2         /// post序列化訪問介面
 3         /// </summary>
 4         /// <param name="url">介面路徑</param>
 5         /// <param name="order">引數</param>
 6         /// <returns></returns>
 7         public static string POST(string url, string order)
 8         {
 9             string WorkOrder = "";
10             string strURL = url;
11             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
12 
13             request.ContentType = "application/json";
14             request.Method = "POST";
15 
16             using (var streamWriter = new StreamWriter(request.GetRequestStream()))
17             {
18                 string json = new JavaScriptSerializer().Serialize(new { mnum = order });
19                 streamWriter.Write(json);
20             }
21             HttpWebResponse response;
22             try
23             {
24                 //獲得響應流
25                 response = (HttpWebResponse)request.GetResponse();
26             }
27             catch (WebException ex)
28             {
29                 response = ex.Response as HttpWebResponse;
30 
31             }
32             Stream stream = response.GetResponseStream();
33 
34             //獲取響應內容
35             using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
36             {
37                 WorkOrder = reader.ReadToEnd();
38             }
39             MES rb = JsonConvert.DeserializeObject<MES>(WorkOrder);
40             if (rb.result == 0)
41             {
42                 rb.res = "false";
43                 return rb.res;
44             }
45             return rb.snnum;
46 
47         }