公司使用了代理,要访问外部网站,必须要通过代理访问。
代码如下:
// 设置一些公用的请求头
NameValueCollection collection = new NameValueCollection();
collection.Add("Accept-Encoding", "gzip,deflate,sdch");
collection.Add("Accept-Language", "zh-CN,zh;q=0.8");
req = (HttpWebRequest)WebRequest.Create(url);
req.KeepAlive = true;
req.Method = method.ToUpper();
req.AllowAutoRedirect = true;
req.CookieContainer = Cookies;
req.ContentType = ContentType;
req.UserAgent = UserAgent;
req.Accept = AcceptType;
req.Timeout = TimeOut;
req.Referer = refer;
req.Headers.Add(collection);
WebProxy wp = new WebProxy("openproxy.com:8080",true);
wp.Credentials = new NetworkCredential("username","pwd","area");
req.Proxy = wp;
操作的结果是:
会报异常,提示:
System.Net.WebException:无法连接到远程服务器---->
System.Net.Sockets.SocketException:以一种访问权限不允许的方式做了一个访问套接字的尝试。192.16.133.23:8080
在System.Net.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)。。。
我做了以下尝试:
1、把访问了代理的端口改成80,如果使用默认的代理,提示要验证信息;如果使用代码中的代理,获得的是代理服务器的访问错误页面提示。(这是正确结果)。
2、telnet了代理服务器的8080端口,成功。
由上面两个尝试可以知道,我的代理的验证信息是对的,本地的端口也没有冲突,同时代理服务器的8080端口也是开放的。
但是就是不知道为什么,把80端口改成8080端口,就会报异常,百思不得其解。
从网上搜到的信息中看,可能的原因是端口冲突和没有应用程序权限不够。端口冲突是不可能的,应该本地访问的端口不是固定的;也用管理打开过,还是这个问题。
我想跟踪一下汇编代码, 但是进入到Response里面,调用了一个call就返回了,进不去。
不知道哪个大神知道是什么情况,或者是有没有什么定位手段或处理思路。