Winsock使用系统代理设置

时间:2015-06-28 11:39:35

标签: winapi proxy winsock wininet

我有一个简单的winsock程序,我希望通过系统代理传递我的连接。我看到一些帖子解释了如何捕获系统代理,然后发送如下字符串:

CONNECT 127.0.0.1:8080 HTTP/1.0\r\n

等等。 但它并不是一直都在工作。 另一方面,当使用WinInet API(InternetOpen()函数和...)时,它可以很好地工作。 我需要像WinInet一样正常工作的解决方案和像Winsocket这样的双向功能。

1 个答案:

答案 0 :(得分:2)

没有"系统代理"这样的东西。 WinInet的代理设置只是WinInet的一部分,而不是Windows本身(Internet Explorer使用WinInet,因此WinInet配置影响IE,但不影响WinSock)。

CONNECT 127.0.0.1:8080 HTTP/1.0\r\n\r\n是用于通过基于HTTP的代理服务器建立隧道的连接字符串(请参阅Tunneling with HTTP CONNECT)。您连接到代理,发送CONNECT命令以使其连接到目标服务器,检查响应,如果成功,则可以正常与目标服务器进行双向通信,就像您已直接连接到目标服务器一样

但还有其他类型的代理,例如SOCKS。相同的概念(连接到代理,请求连接到目标,之后正常进行),但与HTTP的协议非常不同。

使用WinSock进行编码时,您必须在自己的代码中手动实现各种代理协议,或者找到第三方库来为您处理。 WinSock没有内置的代理支持。而且您必须提前知道正在使用什么类型的代理,以便您可以使用正确的协议。有动态检测代理设置的API,或者只是要求用户提供详细信息。