Winsock 使用系统代理设置

Winsock use system proxy settings

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

CONNECT 127.0.0.1:8080 HTTP/1.0\r\n

等等。 但它并不总是有效。 另一方面,当使用 WinInet API(InternetOpen() 函数和...)时,它运行良好。 我需要像 WinInet 这样始终正常工作的解决方案和像 Winsocket 这样的双向功能。

没有 "system proxy" 这样的东西。 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 可以动态检测代理设置,或者只要求用户提供详细信息。