这是我的代码:
HttpWebRequest firstRequest = (HttpWebRequest)HttpWebRequest.Create("http://opizo.com/OEdwHe");
firstRequest.CookieContainer = new CookieContainer();
firstRequest.Method = "GET";
firstRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0";
WebProxy tempProxy = new WebProxy(Proxy+':'+ ProxyPort /*"127.0.0.1:8888"*/);
tempProxy.BypassProxyOnLocal = false;
tempProxy.UseDefaultCredentials = true;
firstRequest.Accept = "text/html";
firstRequest.UseDefaultCredentials = true;
firstRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
firstRequest.Proxy = tempProxy;
firstRequest.Timeout = 20000;
WebResponse firstResponse = firstRequest.GetResponse();
System.IO.Stream firstStream = firstResponse.GetResponseStream();
StreamReader firstStreamReader = new StreamReader(firstStream);
string data = firstStreamReader.ReadToEnd();
我要连接的链接是https,但我以http格式输入。
代理创建中的Proxy + ProxyPort是代理列表。
错误发生在WebResponse firstResponse = firstRequest.GetResponse();
线。
例外是"远程服务器返回错误:(403)禁止。"
有时当我使用ssl代理时,"操作已超时"抛出异常,很少会抛出异常但它的概率是千分之一。
更新:我删除了这两行
firstRequest.UseDefaultCredentials = true;
firstRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
并且错误403的概率从99%变为1%。 现在例外"操作已经超时"扔了。
更新2:403错误返回。 我认为没有办法在C#中使用http代理连接到https站点,解决问题的最佳方法是使用SOCKS库。