java 异步调用webapi_WebApi 异步请求(HttpClient)

/** Created by SharpDevelop.

* User: RedXu

* Date: 2015-04-16

* Time: 13:58

**/

usingSystem;usingSystem.Net;usingSystem.IO;usingSystem.Text;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Net.Security;usingSystem.Security.Cryptography.X509Certificates;namespaceRedXuCSharpClass

{///

///Http操作类.///

public classHttpHelper

{private const int ConnectionLimit = 100;//编码

private Encoding _encoding =Encoding.Default;//浏览器类型

private string[] _useragents = new string[]{"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)","Mozilla/5.0 (Windows NT 6.1; rv:36.0) Gecko/20100101 Firefox/36.0","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0"};private String _useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36";//接受类型

private String _accept = "text/html, application/xhtml+xml, application/xml, */*";//超时时间

private int _timeout = 30 * 1000;//类型

private string _contenttype = "application/x-www-form-urlencoded";//cookies

private String _cookies = "";//cookies

privateCookieCollection _cookiecollection;//custom heads

private Dictionary _headers = new Dictionary();publicHttpHelper()

{

_headers.Clear();//随机一个useragent

_useragent = _useragents[new Random().Next(0, _useragents.Length)];//解决性能问题?

ServicePointManager.DefaultConnectionLimit =ConnectionLimit;

}public voidInitCookie()

{

_cookies= "";

_cookiecollection= null;

_headers.Clear();

}///

///设置当前编码///

///

public voidSetEncoding(Encoding en)

{

_encoding=en;

}///

///设置UserAgent///

///

public voidSetUserAgent(String ua)

{

_useragent=ua;

}public voidRandUserAgent()

{

_useragent= _useragents[new Random().Next(0, _useragents.Length)];

}public void SetCookiesString(stringc)

{

_cookies=c;

}///

///设置超时时间///

///

public void SetTimeOut(intmsec)

{

_timeout=msec;

}public voidSetContentType(String type)

{

_contenttype=type;

}public voidSetAccept(String accept)

{

_accept=accept;

}///

///添加自定义头///

///

///

public voidAddHeader(String key, String ctx)

{//_headers.Add(key,ctx);

_headers[key] =ctx;

}///

///清空自定义头///

public voidClearHeader()

{

_headers.Clear();

}///

///获取HTTP返回的内容///

///

///

privateString GetStringFromResponse(HttpWebResponse response)

{

String html= "";try{

Stream stream=response.GetResponseStream();

StreamReader sr= newStreamReader(stream, _encoding);

html=sr.ReadToEnd();

sr.Close();

stream.Close();

}catch(Exception e)

{

Trace.WriteLine("GetStringFromResponse Error:" +e.Message);

}returnhtml;

}///

///检测证书///

///

///

///

///

///

private bool CheckCertificate(objectsender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

{return true;

}///

///发送GET请求///

///

///

publicString HttpGet(String url)

{returnHttpGet(url, url);

}///

///发送GET请求///

///

///

///

publicString HttpGet(String url, String refer)

{

String html;try{

ServicePointManager.ServerCertificateValidationCallback= newSystem.Net.Security.RemoteCertificateValidationCallback(CheckCertificate);

HttpWebRequest request=(HttpWebRequest)HttpWebRequest.Create(url);

request.UserAgent=_useragent;

request.Timeout=_timeout;

request.ContentType=_contenttype;

request.Accept=_accept;

request.Method= "GET";

request.Referer=refer;

request.KeepAlive= true;

request.AllowAutoRedirect= true;

request.UnsafeAuthenticatedConnectionSharing= true;

request.CookieContainer= newCookieContainer();//据说能提高性能

request.Proxy = null;if (_cookiecollection != null)

{foreach (Cookie c in_cookiecollection)

{

c.Domain=request.Host;

}

request.CookieContainer.Add(_cookiecollection);

}foreach (KeyValuePair hd in_headers)

{

request.Headers[hd.Key]=hd.Value;

}

HttpWebResponse response=(HttpWebResponse)request.GetResponse();

html=GetStringFromResponse(response);if (request.CookieContainer != null)

{

response.Cookies=request.CookieContainer.GetCookies(request.RequestUri);

}if (response.Cookies != null)

{

_cookiecollection=response.Cookies;

}if (response.Headers["Set-Cookie"] != null)

{string tmpcookie = response.Headers["Set-Cookie"];

_cookiecollection.Add(ConvertCookieString(tmpcookie));

}

response.Close();returnhtml;

}catch(Exception e)

{

Trace.WriteLine("HttpGet Error:" +e.Message);returnString.Empty;

}

}///

///获取MINE文件///

///

///

publicByte[] HttpGetMine(String url)

{

Byte[] mine= null;try{

ServicePointManager.ServerCertificateValidationCallback= newSystem.Net.Security.RemoteCertificateValidationCallback(CheckCertificate);

HttpWebRequest request=(HttpWebRequest)HttpWebRequest.Create(url);

request.UserAgent=_useragent;

request.Timeout=_timeout;

request.ContentType=_contenttype;

request.Accept=_accept;

request.Method= "GET";

request.Referer=url;

request.KeepAlive= true;

request.AllowAutoRedirect= true;

request.UnsafeAuthenticatedConnectionSharing= true;

request.CookieContainer= newCookieContainer();//据说能提高性能

request.Proxy = null;if (_cookiecollection != null)

{foreach (Cookie c in_cookiecollection)

c.Domain=request.Host;

request.CookieContainer.Add(_cookiecollection);

}foreach (KeyValuePair hd in_headers)

{

request.Headers[hd.Key]=hd.Value;

}

HttpWebResponse response=(HttpWebResponse)request.GetResponse();

Stream stream=response.GetResponseStream();

MemoryStream ms= newMemoryStream();byte[] b = new byte[1024];while (true)

{int s = stream.Read(b, 0, b.Length);

ms.Write(b,0, s);if (s == 0 || s

{break;

}

}

mine=ms.ToArray();

ms.Close();if (request.CookieContainer != null)

{

response.Cookies=request.CookieContainer.GetCookies(request.RequestUri);

}if (response.Cookies != null)

{

_cookiecollection=response.Cookies;

}if (response.Headers["Set-Cookie"] != null)

{

_cookies= response.Headers["Set-Cookie"];

}

stream.Close();

stream.Dispose();

response.Close();returnmine;

}catch(Exception e)

{

Trace.WriteLine("HttpGetMine Error:" +e.Message);return null;

}

}///

///发送POST请求///

///

///

///

publicString HttpPost(String url, String data)

{returnHttpPost(url, data, url);

}///

///发送POST请求///

///

///

///

///

publicString HttpPost(String url, String data, String refer)

{

String html;try{

ServicePointManager.ServerCertificateValidationCallback= newSystem.Net.Security.RemoteCertificateValidationCallback(CheckCertificate);

HttpWebRequest request=(HttpWebRequest)HttpWebRequest.Create(url);

request.UserAgent=_useragent;

request.Timeout=_timeout;

request.Referer=refer;

request.ContentType=_contenttype;

request.Accept=_accept;

request.Method= "POST";

request.KeepAlive= true;

request.AllowAutoRedirect= true;

request.CookieContainer= newCookieContainer();//据说能提高性能

request.Proxy = null;if (_cookiecollection != null)

{foreach (Cookie c in_cookiecollection)

{

c.Domain=request.Host;if (c.Domain.IndexOf(':') > 0)

c.Domain= c.Domain.Remove(c.Domain.IndexOf(':'));

}

request.CookieContainer.Add(_cookiecollection);

}foreach (KeyValuePair hd in_headers)

{

request.Headers[hd.Key]=hd.Value;

}byte[] buffer =_encoding.GetBytes(data.Trim());

request.ContentLength=buffer.Length;

request.GetRequestStream().Write(buffer,0, buffer.Length);

request.GetRequestStream().Close();

HttpWebResponse response=(HttpWebResponse)request.GetResponse();

html=GetStringFromResponse(response);if (request.CookieContainer != null)

{

response.Cookies=request.CookieContainer.GetCookies(request.RequestUri);

}if (response.Cookies != null)

{

_cookiecollection=response.Cookies;

}if (response.Headers["Set-Cookie"] != null)

{string tmpcookie = response.Headers["Set-Cookie"];

_cookiecollection.Add(ConvertCookieString(tmpcookie));

}

response.Close();returnhtml;

}catch(Exception e)

{

Trace.WriteLine("HttpPost Error:" +e.Message);returnString.Empty;

}

}public string UrlEncode(stringstr)

{

StringBuilder sb= newStringBuilder();byte[] byStr =_encoding.GetBytes(str);for (int i = 0; i < byStr.Length; i++)

{

sb.Append(@"%" + Convert.ToString(byStr[i], 16));

}return(sb.ToString());

}///

///转换cookie字符串到CookieCollection///

///

///

private CookieCollection ConvertCookieString(stringck)

{

CookieCollection cc= newCookieCollection();string[] cookiesarray = ck.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);for (int i = 0; i < cookiesarray.Length; i++)

{string[] cookiesarray_2 = cookiesarray[i].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);for (int j = 0; j < cookiesarray_2.Length; j++)

{string[] cookiesarray_3 = cookiesarray_2[j].Trim().Split("=".ToCharArray());if (cookiesarray_3.Length == 2)

{string cname = cookiesarray_3[0].Trim();string cvalue = cookiesarray_3[1].Trim();if (cname.ToLower() != "domain" && cname.ToLower() != "path" && cname.ToLower() != "expires")

{

Cookie c= newCookie(cname, cvalue);

cc.Add(c);

}

}

}

}returncc;

}public voidDebugCookies()

{

Trace.WriteLine("**********************BEGIN COOKIES*************************");foreach (Cookie c in_cookiecollection)

{

Trace.WriteLine(c.Name+ "=" +c.Value);

Trace.WriteLine("Path=" +c.Path);

Trace.WriteLine("Domain=" +c.Domain);

}

Trace.WriteLine("**********************END COOKIES*************************");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值