110,566
社区成员
发帖
与我相关
我的任务
分享
HttpWebRequest request = HttpWebRequest.Create("http://www.baidu.com") as HttpWebRequest;
request.KeepAlive = true;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8";
request.Proxy = new WebProxy(this.ip + ":" + this.port);
// 自定义的ValidationRequestState类
// 保存了一些异步返回时候所需的原request的信息以及其他信息
ValidationRequestState state = new ValidationRequestState(request, this);
// 异步返回的请求
IAsyncResult result = request.BeginGetResponse(new AsyncCallback(OnRequestReturn), state);
// 返回的处理
private void OnRequestReturn(IAsyncResult result)
{
// 把之前保存的信息提取出来
ValidationRequestState state = result.AsyncState as ValidationRequestState;
HttpWebRequest request = state.request;
ProxyItem proxy = state.proxy;
HttpWebResponse response;
try
{
// 在这里,有时候会异常有时候不会。
// 如果不异常,以后就能得到一个stream
response = (HttpWebResponse)request.EndGetResponse(result);
}
catch //(Exception e)
{
if (proxy._validationFinished)
return;
proxy.lastState = "连接错误";
proxy.validationCount++;
proxy.failAfterLastSuccessCount++;
proxy.delay = -1;
this._validationFinished = true;
return;
}
// 验证结果
// 这里得到的这个stream,它的Length属性绝大多数时间都会引发
// System.NotSupportedException类型的异常
Stream stream = response.GetResponseStream();
// 所以这个html也没法得到了。以后的代码就没用了
string html = Common.StreamToString(stream, response.CharacterSet);
// ......
}
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(allowCert);
private static bool allowCert(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
return true;
}