/// <summary> /// Http (GET/POST) /// </summary> /// <param name="url">请求URL</param> /// <param name="parameters">请求参数</param> /// <param name="method">请求方法</param> /// <returns>响应内容</returns> public static string Request(string url, IDictionary <string, string> parameters, EnumHttpMethod method) { string jsonStr = string.Empty; if (method == EnumHttpMethod.Post) { HttpWebRequest req = null; HttpWebResponse rsp = null; Stream reqStream = null; req = (HttpWebRequest)WebRequest.Create(url); req.Method = method.ToString(); req.KeepAlive = false; req.ProtocolVersion = HttpVersion.Version10; req.Timeout = 10000; req.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8")); reqStream = req.GetRequestStream(); reqStream.Write(postData, 0, postData.Length); rsp = (HttpWebResponse)req.GetResponse(); Encoding encoding = Encoding.GetEncoding(string.IsNullOrEmpty(rsp.CharacterSet) ? "utf-8" : rsp.CharacterSet); jsonStr = GetResponseAsString(rsp, encoding); return(jsonStr); } else { //创建请求 if (url.Contains("?")) { url = url + "&" + BuildQuery(parameters, "utf8"); } else { url = url + "?" + BuildQuery(parameters, "utf8"); } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //GET请求 request.Method = "GET"; request.ReadWriteTimeout = 5000; request.ContentType = "text/html;charset=UTF-8"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); //返回内容 jsonStr = myStreamReader.ReadToEnd(); return(jsonStr); } }
/// <summary> /// Http (GET/POST) 异步 /// </summary> /// <param name="url">请求URL</param> /// <param name="param">请求参数</param> /// <param name="method">请求方法</param> /// <param name="contentType">响应类型</param> /// <param name="encoding">编码方式</param> /// <param name="timeout">超时时间(单位:毫秒)</param> /// <returns></returns> public static string RequestAsync(string url, string param, EnumHttpMethod method, string contentType = "application/json", Encoding encoding = null, int timeout = 10000) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (string.IsNullOrEmpty(contentType)) { if (method == EnumHttpMethod.Post) { contentType = "application/x-www-form-urlencoded"; } if (method == EnumHttpMethod.Get) { contentType = "text/html"; } } encoding = encoding ?? Encoding.UTF8; if (!contentType.Contains("charset")) { if (contentType.Substring(contentType.Length - 1, 1) == ";") { contentType = contentType + "charset=" + encoding.WebName; } else { contentType = contentType + ";charset=" + encoding.WebName; } } if (!string.IsNullOrEmpty(param)) { if (JsonHelper.IsJson(param)) { } else { //不是json var paramArr = param.Split('&').ToList(); var paramList = new List <Tuple <string, string> >(); foreach (var item in paramArr) { var k = item.Split('=')[0]; var v = item.Split('=')[1]; paramList.Add(new Tuple <string, string>(k, HttpUtility.UrlEncode(v, encoding))); } var paramTemp = (from p in paramList select p.Item1 + "=" + p.Item2).ToList(); var paramStr = string.Join("&", paramTemp); param = paramStr; } if (method == EnumHttpMethod.Get) { var split = url.Contains("?") ? "&" : "?"; url = url + split + param; } } var webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"; webRequest.Method = method.ToString().ToUpper(); var strResponse = string.Empty; if (method == EnumHttpMethod.Post) { webRequest.Timeout = timeout; webRequest.ProtocolVersion = HttpVersion.Version10; webRequest.Credentials = CredentialCache.DefaultCredentials; webRequest.ContentType = contentType; if (!string.IsNullOrEmpty(param)) { byte[] bytes = encoding.GetBytes(param); using (var stream = webRequest.GetRequestStream()) { stream.Write(bytes, 0, bytes.Length); } } } else if (method == EnumHttpMethod.Get) { webRequest.ReadWriteTimeout = timeout; webRequest.ContentType = contentType; } var complete = false; var stime = DateTime.Now; var asyncResult = webRequest.BeginGetResponse(new AsyncCallback(t => { using (var webResponse = webRequest.EndGetResponse(t)) { using (var webStream = webResponse.GetResponseStream()) { if (webResponse.Headers.Get("Content-Encoding") == "gzip") { using (GZipStream gzip = new GZipStream(webStream, CompressionMode.Decompress)) { using (var reader = new StreamReader(gzip, encoding)) { strResponse = reader.ReadToEndAsync().Result; complete = true; } } } else { using (var streamReader = new StreamReader(webStream, encoding)) { strResponse = streamReader.ReadToEndAsync().Result; complete = true; } } } } }), null); while (!complete && (DateTime.Now - stime).TotalMilliseconds < timeout) { } return(strResponse); }