其實調用接口post數據的方法都差不多,區別無非就是格式不一樣,編碼不一樣
過程大致如下:
1.設置HttpWebRequest請求,封裝頭部和編碼格式
2.將提交的內容轉換為byte字節,寫入到請求流里面
3.發送POST數據請求服務器
4.接收服務器返回信息,從返回的響應流里面讀出結果
XML提交方法:輸入的參數需要先轉換為xml格式的字符串
/// <summary> /// 接口調用方法,XML格式 /// </summary> /// <param name="url">接口地址</param> /// <param name="param">參數xml格式的字符串</param> /// <returns></returns> public static string WebRequestPost(string url, string param) { string strResult = ""; HttpWebRequest request = null; HttpWebResponse response = null; Stream stream = null; StreamReader reader = null; try { request = (HttpWebRequest)WebRequest.Create(new Uri(url)); request.ServicePoint.Expect100Continue = false; request.Method = "POST"; request.KeepAlive = true; request.Timeout = 100 * 1000; request.ContentType = "text/xml"; //把數組轉換成流中所需字節數組類型 byte[] bytes = Encoding.UTF8.GetBytes(param); Stream requestStream = request.GetRequestStream(); requestStream.Write(bytes, 0, bytes.Length); requestStream.Close();//釋放 //發送POST數據請求服務器 response = (HttpWebResponse)request.GetResponse(); Encoding encoding = Encoding.UTF8; if (!string.IsNullOrEmpty(response.CharacterSet)) { encoding = Encoding.GetEncoding(response.CharacterSet); } //獲取服務器返回信息 stream = response.GetResponseStream(); reader = new StreamReader(stream, encoding); strResult = reader.ReadToEnd(); } catch (WebException we) { using (var stream1 = we.Response.GetResponseStream()) using (var reader1 = new StreamReader(stream1)) { var data = reader1.ReadToEnd(); throw new Exception(data); } } finally { if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (response != null) response.Close(); } return strResult; }
JSON提交方法:輸入的參數需要先轉換為json格式字符串
/// <summary> /// 接口調用方法,JSON格式 /// </summary> /// <param name="url"></param> /// <param name="jsonData">參數是{"key1": value1, "key2": value2}格式的json數據</param> /// <returns></returns> public static string PostData(string url, string jsonData) { string result = ""; HttpWebRequest request = null; HttpWebResponse response = null; try { request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Timeout = 100 * 1000;//設置請求超時時間,單位為毫秒 request.ContentType = "application/json"; //request.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; byte[] data = Encoding.UTF8.GetBytes(jsonData); request.ContentLength = data.Length; using (Stream reqStream = request.GetRequestStream()) { reqStream.Write(data, 0, data.Length); reqStream.Close(); } response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); //獲取響應內容 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } } catch (WebException we) { using (var stream1 = we.Response.GetResponseStream()) using (var reader1 = new StreamReader(stream1)) { var data = reader1.ReadToEnd(); throw new Exception(data); } } finally { if (response != null) response.Close(); } return result; }