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;
}
}