HttpWebRequest
public static class HttpHelper { private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; private static Encoding requestEncoding = Encoding.UTF8; public static bool HttpGet(string url, out string HttpWebResponseString, int timeout) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } HttpWebResponseString = ""; try { HttpWebRequest httpWebRequest = WebRequest.Create(url) as HttpWebRequest; httpWebRequest.Method = "GET"; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.UserAgent = DefaultUserAgent; httpWebRequest.Timeout = timeout; HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; HttpWebResponseString = ReadHttpWebResponse(httpWebResponse); return true; } catch (Exception ex) { HttpWebResponseString = ex.ToString(); return false; } } public static bool HttpPost(string url, byte[] Data, out string HttpWebResponseString, int timeout) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } HttpWebResponseString = ""; HttpWebRequest httpWebRequest = null; Stream stream = null; try { httpWebRequest = (WebRequest.Create(url) as HttpWebRequest); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.UserAgent = DefaultUserAgent; httpWebRequest.Timeout = timeout; if (Data != null) { requestEncoding.GetString(Data); stream = httpWebRequest.GetRequestStream(); stream.Write(Data, 0, Data.Length); } HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; HttpWebResponseString = ReadHttpWebResponse(httpWebResponse); return true; } catch (Exception ex) { HttpWebResponseString = ex.ToString(); return false; } finally { stream?.Close(); } } /// <summary> /// 指定Post地址使用Get 方式获取全部字符串 /// </summary> /// <param name="url">请求后台地址</param> /// <returns></returns> public static string Post(string url, Dictionary<string, string> dic) { string result = ""; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; #region 添加Post 参数 StringBuilder builder = new StringBuilder(); int i = 0; foreach (var item in dic) { if (i > 0) builder.Append("&"); builder.AppendFormat("{0}={1}", item.Key, item.Value); i++; } byte[] data = Encoding.UTF8.GetBytes(builder.ToString()); req.ContentLength = data.Length; using (Stream reqStream = req.GetRequestStream()) { reqStream.Write(data, 0, data.Length); reqStream.Close(); } #endregion HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); Stream stream = resp.GetResponseStream(); //获取响应内容 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } return result; } public static string HttpPost(string url, IDictionary<string, string> parameters, string charset) { //StreamWriter sw = new StreamWriter(Application.StartupPath + @"/SyncUrl.log", true, System.Text.Encoding.GetEncoding("gb2312")); //sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" " + url); //sw.Close(); sw.Dispose(); HttpWebRequest req = GetWebRequest(url, "POST"); req.ContentType = "application/json;charset=" + charset; string p = BuildQuery(parameters, charset); byte[] postData = Encoding.GetEncoding(charset).GetBytes(p); Stream reqStream = req.GetRequestStream(); reqStream.Write(postData, 0, postData.Length); reqStream.Close(); HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); return GetResponseAsString(rsp, Encoding.UTF8); } public static string HttpPost(string url, IDictionary<string, string> parameters, string charset,string contentType) { HttpWebRequest req = GetWebRequest(url, "POST"); req.ContentType = contentType; string p = BuildQuery(parameters, charset); byte[] postData = Encoding.GetEncoding(charset).GetBytes(p); Stream reqStream = req.GetRequestStream(); reqStream.Write(postData, 0, postData.Length); reqStream.Close(); HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); return GetResponseAsString(rsp, Encoding.UTF8); } public static string Post(string url, IDictionary<string, string> parameters, string data, string apiToken = null) { if (parameters != null && parameters.Count > 0) { if (url.Contains("?")) { url = url + "&" + BuildQuery(parameters); } else { url = url + "?" + BuildQuery(parameters); } } HttpWebRequest req = GetWebRequest(url, "POST"); req.ContentType = "application/json;charset=utf-8"; if (!string.IsNullOrEmpty(apiToken)) { req.Headers.Add("apiToken", apiToken); } byte[] postData = Encoding.UTF8.GetBytes(data); System.IO.Stream reqStream = req.GetRequestStream(); reqStream.Write(postData, 0, postData.Length); reqStream.Close(); HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); return GetResponseAsString(rsp, Encoding.UTF8); } public static string sendPost(string url, string json) { System.IO.Stream stream = null; StreamReader reader = null; try { Encoding encoding = Encoding.UTF8; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Accept = "text/html, application/xhtml+xml, */*"; request.ContentType = "application/json"; byte[] buffer = encoding.GetBytes(json); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { return reader.ReadToEnd(); } } catch (Exception ex) { Console.WriteLine(ex.Message); return "{\"FStatus\":0,\"FMsg\":‘" + ex.Message + "‘}"; } finally { if (stream != null) stream.Close(); if (reader != null) reader.Close(); } return null; } private static HttpWebRequest GetWebRequest(string url, string method) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.ServicePoint.Expect100Continue = false; req.Method = method; req.KeepAlive = true; req.UserAgent = "SEASHOP"; req.Timeout = 300000; return req; } /// <summary> /// 把响应流转换为文本。 /// </summary> /// <param name="rsp">响应流对象</param> /// <param name="encoding">编码方式</param> /// <returns>响应文本</returns> public static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding) { StringBuilder result = new StringBuilder(); Stream stream = null; StreamReader reader = null; try { // 以字符流的方式读取HTTP响应 stream = rsp.GetResponseStream(); reader = new StreamReader(stream, encoding); // 按字符读取并写入字符串缓冲 int ch = -1; while ((ch = reader.Read()) > -1) { // 过滤结束符 char c = (char)ch; if (c != ‘\0‘) { result.Append(c); } } } finally { // 释放资源 if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (rsp != null) rsp.Close(); } return result.ToString(); } /// <summary> /// 组装普通文本请求参数。 /// </summary> /// <param name="parameters">Key-Value形式请求参数字典</param> /// <returns>URL编码后的请求数据</returns> public static string BuildQuery(IDictionary<string, string> parameters, string charset) { StringBuilder postData = new StringBuilder(); bool hasParam = false; IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator(); while (dem.MoveNext()) { string name = dem.Current.Key; string value = dem.Current.Value; // 忽略参数名或参数值为空的参数 if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value)) { if (hasParam) { postData.Append("&"); } postData.Append(name); postData.Append("="); string encodedValue = HttpUtility.UrlEncode(value, Encoding.GetEncoding(charset)); postData.Append(encodedValue); hasParam = true; } } return postData.ToString(); } public static string ReadHttpWebResponse(HttpWebResponse HttpWebResponse) { Stream stream = null; StreamReader streamReader = null; #pragma warning disable CS0219 // 变量“text”已被赋值,但从未使用过它的值 string text = null; #pragma warning restore CS0219 // 变量“text”已被赋值,但从未使用过它的值 try { stream = HttpWebResponse.GetResponseStream(); streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8")); return streamReader.ReadToEnd(); } catch (Exception ex) { throw ex; } finally { streamReader?.Close(); stream?.Close(); HttpWebResponse?.Close(); } } public static string BuildQuery(IDictionary<string, string> parameters) { StringBuilder postData = new StringBuilder(); bool hasParam = false; IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator(); while (dem.MoveNext()) { string name = dem.Current.Key; string value = dem.Current.Value; // 忽略参数名或参数值为空的参数 if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value)) { if (hasParam) { postData.Append("&"); } postData.Append(name); postData.Append("="); postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8)); hasParam = true; } } return postData.ToString(); } }