You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
5.1 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Specialized;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.Security;
  8. using System.Security.Cryptography.X509Certificates;
  9. using System.Text;
  10. using System.Web;
  11. namespace QZWebApi.Bus
  12. {
  13. public class HttpHelper
  14. {
  15. /// <summary>  
  16.     /// 创建GET方式的HTTP请求  
  17.     /// </summary>  
  18.     /// <param name="url">请求的URL</param>   
  19.     /// <param name="parameters">随同请求GET的参数名称及参数值字典</param>  
  20.     /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
  21.     /// <param name="timeout">请求的超时时间</param>  
  22.     /// <returns></returns>  
  23. public static string CreateGetHttpRequest(string url, NameValueCollection parameters, string userAgent = "", int timeout = 90000)
  24. {
  25. if (string.IsNullOrEmpty(url))
  26. {
  27. throw new ArgumentNullException("url");
  28. }
  29. if (parameters != null && parameters.Count > 0)
  30. {
  31. if (url.Contains("?"))
  32. {
  33. url = $"{url}&{NameValueCollectionToString(parameters)}";
  34. }
  35. else
  36. {
  37. url = $"{url}?{NameValueCollectionToString(parameters)}";
  38. }
  39. }
  40. HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(url);
  41. wreq.Method = "GET";
  42. wreq.Timeout = timeout;
  43. wreq.UserAgent = (string.IsNullOrEmpty(userAgent)) ? "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" : userAgent;
  44. HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse();
  45. //采用流读取,并确定编码方式
  46. var result = "";
  47. using (HttpWebResponse httpWebResponse = wreq.GetResponse() as HttpWebResponse)
  48. {
  49. using (Stream stream2 = wreq.GetResponse().GetResponseStream())
  50. {
  51. using (StreamReader streamReader = new StreamReader(stream2, Encoding.UTF8))
  52. {
  53. result = streamReader.ReadToEnd();
  54. }
  55. }
  56. }
  57. return result;
  58. }
  59. public static string NameValueCollectionToString(NameValueCollection nvc)
  60. {
  61. StringBuilder sb = new StringBuilder();
  62. foreach (string key in nvc.Keys)
  63. {
  64. sb.AppendFormat("{0}={1}&", key, nvc[key]);
  65. }
  66. return sb.ToString().TrimEnd('&');
  67. }
  68. /// <summary>
  69. /// 调用api返回json
  70. /// </summary>
  71. /// <param name="url">api地址</param>
  72. /// <param name="jsonstr">接收参数</param>
  73. /// <param name="type">类型</param>
  74. /// <returns></returns>
  75. public static string HttpPost(string url, string jsonstr)//,string type
  76. {
  77. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + jsonstr); //--需要封装的参数
  78. request.CookieContainer = new CookieContainer();
  79. //以下是发送的http头
  80. request.Referer = "";
  81. //request.ContentType = "text/xml";
  82. request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
  83. request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
  84. request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
  85. request.KeepAlive = true;
  86. //上面的http头看情况而定,但是下面俩必须加
  87. request.ContentType = "application/x-www-form-urlencoded";
  88. Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
  89. request.Method = "get"; //--需要将get改为post才可行
  90. string postDataStr;
  91. //Stream requestStream = request.GetRequestStream();
  92. if (jsonstr != "")
  93. {
  94. postDataStr = jsonstr;//--需要封装,形式如“arg=arg1&arg2=arg2”
  95. byte[] postData = encoding.GetBytes(postDataStr);//postDataStr即为发送的数据,
  96. //request.ContentLength = postData.Length; //写入后不允许设置此属性
  97. //requestStream.Write(postData, 0, postData.Length);
  98. }
  99. HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //远程服务器返回错误: (405) 不允许的方法/远程服务器返回错误: (500) 内部服务器错误。
  100. Stream responseStream = response.GetResponseStream();
  101. StreamReader streamReader = new StreamReader(responseStream, encoding);
  102. string retString = streamReader.ReadToEnd();
  103. streamReader.Close();
  104. responseStream.Close();
  105. return retString;
  106. }
  107. }
  108. }