using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Web; namespace QZWebApi.Bus { public class HttpHelper { ///        /// 创建GET方式的HTTP请求       ///        /// 请求的URL        /// 随同请求GET的参数名称及参数值字典       /// 请求的客户端浏览器信息,可以为空       /// 请求的超时时间       ///    public static string CreateGetHttpRequest(string url, NameValueCollection parameters, string userAgent = "", int timeout = 90000) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (parameters != null && parameters.Count > 0) { if (url.Contains("?")) { url = $"{url}&{NameValueCollectionToString(parameters)}"; } else { url = $"{url}?{NameValueCollectionToString(parameters)}"; } } HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(url); wreq.Method = "GET"; wreq.Timeout = timeout; 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; HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse(); //采用流读取,并确定编码方式 var result = ""; using (HttpWebResponse httpWebResponse = wreq.GetResponse() as HttpWebResponse) { using (Stream stream2 = wreq.GetResponse().GetResponseStream()) { using (StreamReader streamReader = new StreamReader(stream2, Encoding.UTF8)) { result = streamReader.ReadToEnd(); } } } return result; } public static string NameValueCollectionToString(NameValueCollection nvc) { StringBuilder sb = new StringBuilder(); foreach (string key in nvc.Keys) { sb.AppendFormat("{0}={1}&", key, nvc[key]); } return sb.ToString().TrimEnd('&'); } /// /// 调用api返回json /// /// api地址 /// 接收参数 /// 类型 /// public static string HttpPost(string url, string jsonstr)//,string type { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + jsonstr); //--需要封装的参数 request.CookieContainer = new CookieContainer(); //以下是发送的http头 request.Referer = ""; //request.ContentType = "text/xml"; request.Headers["Accept-Language"] = "zh-CN,zh;q=0."; request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3"; 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"; request.KeepAlive = true; //上面的http头看情况而定,但是下面俩必须加 request.ContentType = "application/x-www-form-urlencoded"; Encoding encoding = Encoding.UTF8;//根据网站的编码自定义 request.Method = "get"; //--需要将get改为post才可行 string postDataStr; //Stream requestStream = request.GetRequestStream(); if (jsonstr != "") { postDataStr = jsonstr;//--需要封装,形式如“arg=arg1&arg2=arg2” byte[] postData = encoding.GetBytes(postDataStr);//postDataStr即为发送的数据, //request.ContentLength = postData.Length; //写入后不允许设置此属性 //requestStream.Write(postData, 0, postData.Length); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //远程服务器返回错误: (405) 不允许的方法/远程服务器返回错误: (500) 内部服务器错误。 Stream responseStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, encoding); string retString = streamReader.ReadToEnd(); streamReader.Close(); responseStream.Close(); return retString; } } }