我们要通过代理服务器使用后台操作(窗口服务)。
基本上,我们这样做:
public WebClient GetWebClient(){
var webClient = new WebClient();
webClient.proxy = new WebProxy(Configuration.ProxyHost, Configuration.ProxyPort);
// add a bunch of headers to the WebClient (sessionids, etc.)
return webClient;
}
代理是我们使用FreeProxy配置的代理。
我已经在我正在测试的计算机上启用了日志记录,并且可以确认在Firefox中使用它时是否正在向代理发出请求。
代理服务器不需要身份验证,除了IP必须在我们的办公室内(根据Firefox证据,我认为不是问题)。
但是,在我们的后台进程中,我在使用webclient时似乎没有使用代理:
using(var wc = GetWebClient())
using(var s = wc.OpenRead("someurl"))
using(var sr = new StreamReader(s)){
return sr.ReadToEnd();
}
我没有从代理收到任何错误,但是,即使代理已经明确设置,似乎我们只是没有它。
信息似乎很好,只是不通过我们的代理。
使用带有WebClient
的代理时,我是否遗漏了某些内容?
编辑:更多细节。如果我们在服务器上禁用代理服务,那么我们会得到一个我们无法连接的异常。因此,似乎webclient正在尝试联系代理,但该流量实际上并未流经代理。
Inner Exception: SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
答案 0 :(得分:1)
事实证明FreeProxy不接受HTTPS流量。
我猜代理必须返回它可以路由的流量类型,如果不能,则webclient什么也不做。
切换到使用Burp套件作为我们的代理,因为它可以接受HTTPS。
答案 1 :(得分:0)
您必须默认配置窗口以使用代理,或者在代码中手动设置代理,请参阅:http://msdn.microsoft.com/en-us/library/system.net.webclient.proxy(v=VS.100).aspx
答案 2 :(得分:0)
据我所知,您正在使用WebClient类。我能够看到以下请求......
using(var client = new WebClient())
{
client.Proxy = new WebProxy("localhost", 8888);
Console.WriteLine(client.DownloadString("http://www.google.com"));
}
在Fiddler上运行我的本地方框。现在,如果我关闭Fiddler,我会得到WebException:
Unable to connect to the remote server
内部SocketException:
No connection could be made because the target machine actively refused it 127.0.0.1:8888
所以,说到这一点,我的猜测是你的代理服务器正在运行,但它只是没有记录传出的HTTP请求。