我正在尝试通过SOCKS5代理连接到Web服务。目前,我的app.config如下:
<system.net>
<defaultProxy enabled="true" >
<proxy proxyaddress="http://xxx.xxx.xxx.xxx:yyyy" bypassonlocal="True" />
</defaultProxy>
</system.net>
这适用于http代理,但它只是不连接到SOCKS5。我已经谷歌搜索到了答案,并且找不到任何解决了这个问题的人,即使我已经找到了几次问题。任何人都知道如何做到这一点?
答案 0 :(得分:2)
显然,Microsoft没有在其Web类中构建SOCKS代理支持(请参阅http://windows-tech.info/13/f17246e7dd4a8a2b.php)
我也处于这样一种情况,即我希望将内置的.NET Web功能与SOCKS5代理一起使用,并且没有找到任何令人满意的解决方案。我想我的下一步是通过Reflector或Mono代码库获取.NET类的源代码,并重构它以使用上面链接中提到的ProxySocket类。
这比我想要的更多,但似乎是唯一的方法。
答案 1 :(得分:0)
理论上,您可以继承webservice类并覆盖GetWebRequest和GetWebResponse。然后你可以使用这个c#socks class http://www.codeproject.com/Articles/5954/C-class-for-connecting-via-a-SOCKS-Proxy-Server并将webrequest转换为套接字然后再转发。
我能找到的最快的解决方案是使用WideCap设置系统范围的socks代理。这将通过socks代理服务器路由计算机上的所有流量。
答案 2 :(得分:0)
如果您能够使用HttpClient,则可以使用SocksSharp。
我只是按照这个例子,它对我有用。
var settings = new ProxySettings()
{
Host = "xxx.xxx.xxx.xxx",
Port = yyyy
};
using (var proxyClientHandler = new ProxyClientHandler<Socks5>(settings))
{
using (var httpClient = new HttpClient(proxyClientHandler))
{
var response = await httpClient.GetAsync("http://example.com/");
}
}