一、json格式數據提交返回
提交和返回數據都為json格式
參數提交方式:application/json;charset=UTF-8
統一采用UTF-8字符編碼
public string Post(string Url, string jsonParas) { string strURL = Url; //創建一個HTTP請求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL); //Post請求方式 request.Method = "POST"; //內容類型 request.ContentType = "application/x-www-form-urlencoded"; //設置參數,並進行URL編碼 string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas); byte[] payload; //將Json字符串轉化為字節 payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); //設置請求的ContentLength request.ContentLength = payload.Length; //發送請求,獲得請求流 Stream writer; try { writer = request.GetRequestStream();//獲取用於寫入請求數據的Stream對象 } catch (Exception) { writer = null; Console.Write("連接服務器失敗!"); } //將請求參數寫入流 writer.Write(payload, 0, payload.Length); writer.Close();//關閉請求流 // String strValue = "";//strValue為http響應所返回的字符流 HttpWebResponse response; try { //獲得響應流 response = (HttpWebResponse)request.GetResponse(); } catch (WebException ex) { response = ex.Response as HttpWebResponse; } Stream s = response.GetResponseStream(); // Stream postData = Request.InputStream; StreamReader sRead = new StreamReader(s); string postContent = sRead.ReadToEnd(); sRead.Close(); return postContent;//返回Json數據 } 調用: string askurl = testUrl + "?sid=" + sid + "&mobi=" + mobi + "&sign=" + sign + "&msg=" + encodeMsgs; string relust = Post(askurl, ""); // 或者 string relust = Post(askurl, sid=" + sid + "&mobi=" + mobi + "&sign=" + sign + "&msg=" + encodeMsgs);
二、也是josn格式,utf8
/// <summary> /// POST數據到指定地址 /// </summary> /// <param name="url"></param> /// <param name="encoding"></param> /// <param name="data"></param> /// <returns></returns> public static string PostDataToUrl(string url, System.Text.Encoding encoding, System.Collections.Specialized.NameValueCollection data) { //設置HttpWebRequest System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(url)); request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; request.KeepAlive = false; byte[] buffer; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { for (int i = 0; i < data.Count; i++) { buffer = encoding.GetBytes(data.Keys[i]); if (i > 0) ms.WriteByte(Convert.ToByte('&')); ms.Write(buffer, 0, buffer.Length); ms.WriteByte(Convert.ToByte('=')); buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i])); ms.Write(buffer, 0, buffer.Length); } buffer = ms.ToArray(); } request.ContentLength = buffer.Length; using ( System.IO.Stream requestStream = request.GetRequestStream()) { requestStream.Write(buffer, 0, buffer.Length); requestStream.Close(); } try { //獲取數據 using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)(request.GetResponse())) using (System.IO.Stream stream = response.GetResponseStream()) using (System.IO.StreamReader reader = new System.IO.StreamReader(stream, encoding)) { string result = reader.ReadToEnd(); reader.Close(); stream.Close(); response.Close(); return result; } } finally { request.Abort(); } }
調用方法: Byte[] bytes = Encoding.UTF8.GetBytes(msg); //轉換成Base64字符串 msg = BytesToBase64(bytes); string encodeMsgs = System.Web.HttpUtility.UrlEncode(msg);//urlencode編碼 NameValueCollection vc = new NameValueCollection(); vc.Add("sid", sid); vc.Add("mobi", mobi); vc.Add("sign", sign); vc.Add("msg", encodeMsgs);
三、帶證書Xml提交數據
public static string PostHttpsPost(string url, string data, string token,string sign, Encoding encoding) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); System.Net.ServicePointManager.DefaultConnectionLimit = 200; Uri uri = new Uri(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); //User-AgentHTTP標頭的值 request.UserAgent = "Code Sample Web Client"; request.Credentials = CredentialCache.DefaultCredentials; request.Method = "post"; if (!string.IsNullOrEmpty(token) && !string.IsNullOrEmpty(sign))//除了Auth接口以外其他post接口都需要傳這兩個參數 { request.Headers.Add("4GGOGO-Auth-Token", token); request.Headers.Add("HTTP-X-4GGOGO-Signature", sign); } request.ContentType = "text/xml"; request.Headers.Add("charset:utf-8"); request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; request.Timeout = 100000; request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.CookieContainer = new CookieContainer(); CookieCollection cookies = new CookieCollection(); request.CookieContainer.Add(cookies); byte[] buffer = Encoding.UTF8.GetBytes(data); request.ContentLength = buffer.Length; X509Certificate cer = new X509Certificate("E:\\pdata.cer", "changeit");//證書地址和密碼 request.ClientCertificates.Add(cer); System.GC.Collect(); //如果需要POST數據 if (data != null) { string result = ""; //reqStream.Write(buffer, 0, buffer.Length); //reqStream.Close(); using (System.IO.Stream requestStream = request.GetRequestStream()) { requestStream.Write(buffer, 0, buffer.Length); requestStream.Close(); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //獲取服務端返回數據 StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); //關閉連接和流 if (response != null) { response.Close(); } if (request != null) { request.Abort(); } return result; } return ""; } //調用: string data = HelpCommon.GetAuthXml(requestTime, AppKey, signature);//獲取xml字符串拼接,也可以是data序列化成xml數據 string reslut = WebUtils.PostHttpsPost(apiUrl, data, "", "", encoding); var amodel = XmlHelper.XmlDeserialize<TrafficWebInAPI.Models.AuthModel.Response>(reslut);