/// /// /// 指定数据._c# http post">
当前位置:   article > 正文

C#-HTTP请求Post_c# http post

c# http post
  1. /// <summary>
  2. /// post发送字符串数据-可指定数据类型,可设置timeout
  3. /// </summary>
  4. /// <param name="Url"></param>
  5. /// <param name="SendData"></param>
  6. /// <param name="SendData"></param>
  7. /// <param name="ContentType">指定数据类型(text/html, text/plain, text/css, text/javascript, image/jpeg, image/png, image/gif,application/x-www-form-urlencoded, multipart/form-data, application/json, application/xml)</param>
  8. /// <param name="timeout">指定超时时间</param>
  9. /// <param name="state">返回操作状态0:正常;远程服务器报错;数据提交超时</param>
  10. /// <returns></returns>
  11. public static string SendRequestPostData(string Url, string SendData, string ContentType, int timeout, Dictionary<string, string> headers
  12. , ref string Status, ref int StatusCode, string Tag, string LogName)
  13. {
  14. Status = "OK";
  15. System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接
  16. string strURL = Url;
  17. //设置最大连接数
  18. ServicePointManager.DefaultConnectionLimit = 200;
  19. //设置https验证方式
  20. if (Url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  21. {
  22. ServicePointManager.ServerCertificateValidationCallback =
  23. new RemoteCertificateValidationCallback(CheckValidationResult);
  24. }
  25. //创建一个HTTP请求
  26. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
  27. //Post请求方式
  28. request.Method = "POST";
  29. if (timeout != 0)
  30. {
  31. request.Timeout = timeout;
  32. }
  33. CookieContainer cookieContainer = new CookieContainer();
  34. request.CookieContainer = cookieContainer;
  35. request.AllowAutoRedirect = true;
  36. //内容类型
  37. request.ContentType = ContentType == null ? "text/html" : ContentType;
  38. if (headers != null)
  39. {
  40. foreach (string key in headers.Keys)
  41. {
  42. request.Headers.Add(key, headers[key]);
  43. }
  44. }
  45. //设置参数,并进行URL编码
  46. string paraUrlCoded = SendData;//System.Web.HttpUtility.UrlEncode(jsonParas);
  47. byte[] payload;
  48. //将Json字符串转化为字节
  49. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  50. //设置请求的ContentLength
  51. request.ContentLength = payload.Length;
  52. //发送请求,获得请求流
  53. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
  54. Stream writer;
  55. try
  56. {
  57. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  58. }
  59. catch (Exception ex)
  60. {
  61. Status = ex.Message;
  62. T9.Util.LogUtil.WriteLog("SendRequestPostData方法出错[0]" + (Tag != null ? "[" + Tag + "]" : "") + ":" + ex.Message + "\r\n" + ex.StackTrace, LogName);
  63. writer = null;
  64. request.Abort();
  65. return null;
  66. }
  67. //将请求参数写入流
  68. writer.Write(payload, 0, payload.Length);
  69. writer.Close();//关闭请求流
  70. HttpWebResponse response = null;
  71. string postContent = null;
  72. try
  73. {
  74. //获得响应流
  75. response = (HttpWebResponse)request.GetResponse();
  76. }
  77. catch (WebException ex)
  78. {
  79. Status = ex.Status.ToString();
  80. T9.Util.LogUtil.WriteLog("SendRequestPostData方法出错[1]" + (Tag != null ? "[" + Tag + "]" : "") + ":" + ex.Message + "\r\n" + ex.StackTrace, LogName);
  81. response = ex.Response as HttpWebResponse;
  82. }
  83. finally
  84. {
  85. if (response == null)
  86. {
  87. postContent = null;
  88. }
  89. else
  90. {
  91. StatusCode = (int)response.StatusCode;
  92. Stream s = response.GetResponseStream();
  93. StreamReader sRead = new StreamReader(s);
  94. postContent = sRead.ReadToEnd();
  95. request.Abort();
  96. response.Close();
  97. sRead.Close();
  98. }
  99. }
  100. return postContent;//返回Json数据
  101. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/259673
推荐阅读
相关标签
  

闽ICP备14008679号