【问题标题】:Socks Proxy for HttpWebRequestHttpWebRequest 的 Socks 代理
【发布时间】:2011-04-20 19:43:30
【问题描述】:
根据我在尝试解决this 问题时的研究,结果表明.Net WebProxy 类不支持Socks 代理——有点烦人。我似乎也找不到任何代码或信息来解释如何通过可以轻松与 HttpWebRequest (确切地说是 Proxy 属性)一起使用的类来实现 Socks 4/5 支持。
我通过 google 找到了有关如何执行此操作的有限信息。 One suggestion 涉及更改 Internet Explorer 代理设置 - 我不想这样做。
有没有人知道什么可以胜任这项工作或有什么建议?任何帮助将不胜感激。
【问题讨论】:
标签:
.net
proxy
httpwebrequest
socks
【解决方案1】:
更改 IE 的代理设置对您毫无帮助 - 另一位发帖人只是观察到它适用于 IE。因为 .NET Framework 不支持 SOCKS,所以您必须编写自己的 CERN-Proxy 到 SOCKS-Proxy 转换器,这样 .NET 才能与 CERN 代理(它支持的类型)对话,并且您的代码会将其转换为SOCKS 代理调用。
FWIW,这是我目前希望添加到 FiddlerCore (www.fiddler2.com/core) 的内容,因为我已经拥有几乎所有的代码。我唯一真正需要的是一个 SOCKSv4a 代理来测试。
【解决方案2】:
我尝试了许多声称支持 Socks4/5 的 .Net 库,但发现其中许多库无法正常工作或尝试连接到我知道正在运行的代理时出错。
我最终使用了Chilkat Software's Sock/SSL component,这对我来说似乎很有效,即使我必须手动构造 HTTP 请求而不是像我希望的那样使用 HttpWebRequest。
- 更新说明:Chilkat.Http(类似于 HttpWebRequest 类)本身就支持 SOCKS 代理。所以不要像我一样花时间尝试编写自己的 HTTP 请求;只需使用
Chilkat.Http.SocksHostname、Chilkat.Http.SocksPort 和 Chilkat.Http.SocksVersion 属性即可。
【讨论】:
-
Chilkat 现在天生就支持 SOCKS。 Chilkat.Http.SocksVersion、Chilkat.Http.SocksHostname、Chilkat.Http.SocksPort。配置这些属性将强制 HTTP 连接使用 SOCKS。 Chilkat API 参考:link
【解决方案3】:
使用Privoxy 或相同的方法为您的袜子创建 http 代理网关。
将此添加到主配置以链接 Privoxy 和袜子:
forward-socks5 / proxy_host:port .
类似的东西可以直接访问您的本地网络:
forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .
【解决方案4】:
从 .NET 6 开始,socks 代理可以与 HttpClient 一起使用。请参阅 GitHub 上的 this 问题。