public static class HttpHelper
{
public static HttpWebResponse HttpRequest(string getOrPost, string url, Dictionary<string, string> headers, Dictionary<string, string> parameters, Encoding dataEncoding, string contentType, ref CookieContainer cookie)
{
HttpWebRequest httpWebRequest = HttpHelper.CreateRequest(getOrPost, url, headers, parameters, dataEncoding, contentType);
bool flag = cookie.Count == 0;
if (flag)
{
httpWebRequest.CookieContainer = new CookieContainer();
cookie = httpWebRequest.CookieContainer;
}
else
{
httpWebRequest.CookieContainer = cookie;
}
bool flag2 = getOrPost == "POST" && parameters != null && parameters.Count != 0;
if (flag2)
{
byte[] array = HttpHelper.FormatPostParameters(parameters, dataEncoding, contentType);
using (Stream requestStream = httpWebRequest.GetRequestStream())
{
requestStream.Write(array, 0, array.Length);
requestStream.Close();
}
}
WebResponse webResponse = null;
try
{
webResponse = httpWebRequest.GetResponse();
}
catch (WebException ex)
{
webResponse = (HttpWebResponse)ex.Response;
}
catch (Exception ex2)
{
throw ex2;
}
bool flag3 = webResponse == null;
HttpWebResponse result;
if (flag3)
{
try
{
result = (httpWebRequest.GetResponse() as HttpWebResponse);
return result;
}
catch (WebException ex3)
{
webResponse = (HttpWebResponse)ex3.Response;
}
}
result = (HttpWebResponse)webResponse;
return result;
}
private static HttpWebRequest CreateRequest(string getOrPost, string url, Dictionary<string, string> headers, Dictionary<string, string> parameters, Encoding paraEncoding, string contentType)
{
bool flag = string.IsNullOrEmpty(url);
if (flag)
{
throw new ArgumentNullException("url");
}
bool flag2 = parameters != null && parameters.Count > 0 && paraEncoding == null;
if (flag2)
{
throw new ArgumentNullException("requestEncoding");
}
bool flag3 = url.StartsWith("https", StringComparison.OrdinalIgnoreCase);
HttpWebRequest httpWebRequest;
if (flag3)
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(HttpHelper.CheckValidationResult);
httpWebRequest = (WebRequest.Create(url) as HttpWebRequest);
httpWebRequest.ProtocolVersion = HttpVersion.Version10;
}
else
{
httpWebRequest = (WebRequest.Create(url) as HttpWebRequest);
}
bool flag4 = getOrPost == "GET";
if (flag4)
{
httpWebRequest.Method = "GET";
bool flag5 = parameters != null && parameters.Count > 0;
if (flag5)
{
url = HttpHelper.FormatGetParametersToUrl(url, parameters, paraEncoding);
}
}
else
{
httpWebRequest.Method = "POST";
}
bool flag6 = contentType == null;
if (flag6)
{
httpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
}
else
{
httpWebRequest.ContentType = contentType;
}
httpWebRequest.ServicePoint.Expect100Continue = false;
httpWebRequest.ServicePoint.ConnectionLimit = 2147483647;
bool flag7 = headers != null;
if (flag7)
{
HttpHelper.FormatRequestHeaders(headers, httpWebRequest);
}
httpWebRequest.ServicePoint.ConnectionLimit = 2147483647;
return httpWebRequest;
}
private static void FormatRequestHeaders(Dictionary<string, string> headers, HttpWebRequest request)
{
foreach (KeyValuePair<string, string> current in headers)
{
string text = current.Key.ToLower();
string text2 = text;
if (text2 == null)
{
goto IL_7C;
}
if (!(text2 == "connection"))
{
if (!(text2 == "content-type"))
{
if (!(text2 == "transfer-enconding"))
{
goto IL_7C;
}
request.TransferEncoding = current.Value;
}
else
{
request.ContentType = current.Value;
}
}
else
{
request.KeepAlive = false;
}
continue;
IL_7C:
request.Headers.Add(current.Key, current.Value);
}
}
private static string FormatGetParametersToUrl(string url, Dictionary<string, string> parameters, Encoding paraEncoding)
{
bool flag = url.IndexOf("?") < 0;
if (flag)
{
url += "?";
}
int num = 0;
string text = "";
foreach (KeyValuePair<string, string> current in parameters)
{
bool flag2 = num > 0;
if (flag2)
{
text += "&";
}
text = text + HttpUtility.UrlEncode(current.Key, paraEncoding) + "=" + HttpUtility.UrlEncode(current.Value, paraEncoding);
num++;
}
url += text;
return url;
}
private static byte[] FormatPostParameters(Dictionary<string, string> parameters, Encoding dataEncoding, string contentType)
{
string text = "";
int num = 0;
bool flag = !string.IsNullOrEmpty(contentType) && contentType.ToLower().Trim() == "application/json";
if (flag)
{
text = "{";
}
foreach (KeyValuePair<string, string> current in parameters)
{
bool flag2 = !string.IsNullOrEmpty(contentType) && contentType.ToLower().Trim() == "application/json";
if (flag2)
{
bool flag3 = num > 0;
if (flag3)
{
bool flag4 = current.Value.StartsWith("{");
if (flag4)
{
text += string.Format(",\"{0}\":{1}", current.Key, current.Value);
}
else
{
text += string.Format(",\"{0}\":\"{1}\"", current.Key, current.Value);
}
}
else
{
bool flag5 = current.Value.StartsWith("{");
if (flag5)
{
text += string.Format("\"{0}\":{1}", current.Key, current.Value);
}
else
{
text += string.Format("\"{0}\":\"{1}\"", current.Key, current.Value);
}
}
}
else
{
bool flag6 = num > 0;
if (flag6)
{
text += string.Format("&{0}={1}", current.Key, HttpUtility.UrlEncode(current.Value, dataEncoding));
}
else
{
text = string.Format("{0}={1}", current.Key, HttpUtility.UrlEncode(current.Value, dataEncoding));
}
}
num++;
}
bool flag7 = !string.IsNullOrEmpty(contentType) && contentType.ToLower().Trim() == "application/json";
if (flag7)
{
text += "}";
}
return dataEncoding.GetBytes(text);
}
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
public static string GetAllCookies(CookieContainer cc)
{
List<Cookie> list = new List<Cookie>();
Hashtable hashtable = (Hashtable)cc.GetType().InvokeMember("m_domainTable", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField, null, cc, new object[0]);
foreach (object current in hashtable.Values)
{
SortedList sortedList = (SortedList)current.GetType().InvokeMember("m_list", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField, null, current, new object[0]);
foreach (CookieCollection cookieCollection in sortedList.Values)
{
foreach (Cookie item in cookieCollection)
{
list.Add(item);
}
}
}
StringBuilder stringBuilder = new StringBuilder();
foreach (Cookie current2 in list)
{
stringBuilder.AppendFormat("{0};{1};{2};{3};{4};{5}\r\n", new object[]
{
current2.Domain,
current2.Name,
current2.Path,
current2.Port,
current2.Secure.ToString(),
current2.Value
});
}
return stringBuilder.ToString();
}
}
C# HttpHelper
最新推荐文章于 2024-01-02 10:32:36 发布