using System.Collections.Specialized; using System.Net; using System.Text; namespace JNPF.Extras.CollectiveOAuth.Utils; public class HttpUtils { /// /// 模拟Form表单post请求. /// /// /// /// /// /// public static string RequestFormPost(string postUrl, string postData = null, Dictionary header = null, string charset = null) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // 加上这一句 if (string.IsNullOrWhiteSpace(charset)) charset = "UTF-8"; if (string.IsNullOrWhiteSpace(postData)) postData = string.Empty; Stream outstream = null; Stream instream = null; StreamReader sr = null; HttpWebResponse response = null; HttpWebRequest request = null; Encoding encoding = System.Text.Encoding.GetEncoding(charset); byte[] data = encoding.GetBytes(postData); // 准备请求... try { // 设置参数 request = WebRequest.Create(postUrl) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded;charset=" + charset.ToLower(); request.ContentLength = data.Length; ComeSetRequestHeader(request, header); outstream = request.GetRequestStream(); outstream.Write(data, 0, data.Length); outstream.Close(); // 发送请求并获取相应回应数据 response = request.GetResponse() as HttpWebResponse; // 直到request.GetResponse()程序才开始向目标网页发送Post请求 instream = response.GetResponseStream(); sr = new StreamReader(instream, encoding); // 返回结果网页(html)代码 string content = sr.ReadToEnd(); string err = string.Empty; return content; } catch (Exception ex) { string err = ex.Message; return string.Empty; } } /// /// 普通post请求. /// /// /// /// /// /// public static string RequestPost(string postUrl, string postData = null, Dictionary header = null, string charset = null) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // 加上这一句 if (string.IsNullOrWhiteSpace(charset)) { charset = "UTF-8"; } if (string.IsNullOrWhiteSpace(postData)) { postData = string.Empty; } Stream outstream = null; Stream instream = null; StreamReader sr = null; HttpWebResponse response = null; HttpWebRequest request = null; Encoding encoding = System.Text.Encoding.GetEncoding(charset); byte[] data = encoding.GetBytes(postData); // 准备请求... try { // 设置参数 request = WebRequest.Create(postUrl) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = "POST"; request.ContentType = "application/json;charset=" + charset.ToLower(); request.ContentLength = data.Length; ComeSetRequestHeader(request, header); outstream = request.GetRequestStream(); outstream.Write(data, 0, data.Length); outstream.Close(); // 发送请求并获取相应回应数据 response = request.GetResponse() as HttpWebResponse; // 直到request.GetResponse()程序才开始向目标网页发送Post请求 instream = response.GetResponseStream(); sr = new StreamReader(instream, encoding); // 返回结果网页(html)代码 string content = sr.ReadToEnd(); string err = string.Empty; return content; } catch (Exception ex) { string err = ex.Message; return string.Empty; } } /// /// 有一些请求比较特殊,需要标记Accept为application/json. /// /// 地址. /// public static string RequestJsonGet(string url, Dictionary header = null) { StringBuilder builder = new StringBuilder(); builder.Append(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(builder.ToString()); request.UserAgent = "Foo"; request.Accept = "application/json"; ComeSetRequestHeader(request, header); return ComeRequestGet(request); } /// /// 发送Get请求. /// /// 地址. /// 请求参数定义. public static string RequestGet(string url, Dictionary header = null) { StringBuilder builder = new StringBuilder(); builder.Append(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(builder.ToString()); request.ContentType = "application/json;charset=utf-8;"; ComeSetRequestHeader(request, header); return ComeRequestGet(request); } /// /// 通用的设置RequestHeader方法. /// /// /// public static void ComeSetRequestHeader(HttpWebRequest request, Dictionary header = null) { if (header != null && header.Count > 0) { foreach (var item in header) { switch (item.Key.ToUpper()) { case "HOST": request.Host = Convert.ToString(item.Value); break; case "CONTENT-TYPE": request.ContentType = Convert.ToString(item.Value); break; case "CONNECTION": SetSpecialHeaderValue(request.Headers, item.Key, Convert.ToString(item.Value)); break; default: request.Headers.Add(item.Key, Convert.ToString(item.Value)); break; } } } } /// /// 设置特殊的header. /// /// /// /// public static void SetSpecialHeaderValue(WebHeaderCollection header, string name, string value) { var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); if (property != null) { var collection = property.GetValue(header, null) as NameValueCollection; collection[name] = value; } } /// /// 通用的get请求. /// /// /// public static string ComeRequestGet(HttpWebRequest request) { string result = ""; request.AllowAutoRedirect = true; request.Method = "GET"; request.CookieContainer = new CookieContainer(); request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); Stream stream = resp.GetResponseStream(); try { // 获取内容 using (StreamReader reader = new StreamReader(stream)) { result = reader.ReadToEnd(); } } finally { stream.Close(); } return result; } /// /// 通用的Post请求. /// /// /// public static string ComeRequestPost(HttpWebRequest request) { string result = ""; request.AllowAutoRedirect = true; request.Method = "POST"; request.CookieContainer = new CookieContainer(); request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); Stream stream = resp.GetResponseStream(); try { // 获取内容 using (StreamReader reader = new StreamReader(stream)) { result = reader.ReadToEnd(); } } finally { stream.Close(); } return result; } }