通过VBscript连接到SOCKS5代理



我尝试使用下面的VBscript通过SOCKS5代理连接到URL,但失败了。

我在xmlhttp.setProxyCredentials username, password行上收到Parameter is Incorrect错误,尽管凭据是正确的(检查了 5 次(。

Function GetResult(url As String) As String
Dim xmlhttp
Dim ret As String
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
xmlhttp.setProxy 2, proxy
xmlhttp.Open "GET", url, False
xmlhttp.setProxyCredentials username, password
xmlhttp.send
ret = xmlhttp.responseText
GetResult = ret
End Function

ServerXMLHTTP 在后端使用 WinHTTP。因此,您只能使用 WinHTTP 支持的代理,其中仅包括 HTTP 和 HTTPS 代理,不包括 SOCKS5。

可以在空格分隔的字符串中指定代理。代理列表可以包含用于访问代理的端口号。要列出特定协议的代理,字符串必须遵循格式 protocol=http://proxy_name。有效的协议是HTTP和HTTPS。例如,若要列出 HTTP 代理,有效字符串为 http=http://http_proxy_name:80,其中 http_proxy_name 是代理服务器的名称,80 是访问代理时必须使用的端口号。如果代理使用该协议的默认端口号,则可以省略端口号。如果代理名称单独列出,则可以将其用作没有指定代理的任何协议的默认代理。例如,http=http://http_proxy other_proxy 对任何 HTTP 操作使用 http_proxy,而 HTTPS 协议使用名为 other_proxy 的代理。

您可以在代理绕过列表中列出本地已知的主机名或 IP 地址。此列表可以包含通配符(如"*"(,这些通配符会导致应用程序绕过代理服务器以获取符合指定模式的地址,例如"*.microsoft.com"或"*.org"。通配符必须是列表中最左侧的字符。例如,不支持"aaa.*"。要列出多个地址和主机名,请在代理绕过字符串中用空格或分号分隔它们。如果指定宏,则该函数将绕过任何不包含句点的主机名。

再深入一点,InternetExplorer/WinINet支持SOCKS4,但不支持SOCKS4a或SOCKS5。那篇博文还提到,袜子不是Microsoft从客户那里听到的东西。

到目前为止,我们很少听到关于IE中对SOCKS的有限支持的反馈。大多数用户对现有的 CERN-proxy 对 HTTP/HTTPS/FTP 流量的支持感到满意,对于需要完整套接字代理的情况,则使用 VPN 或 RAS 软件。请注意,也可以使用像 Fiddler 这样的代理作为上游 SOCKSv4a 服务器的网关/桥梁。有关详细信息,请参阅此 StackOverflow 条目。

术语CERN-proxy只是一个HTTP代理,在"如何使用WinInet API使用基于CERN的代理FTP"中进行了更多讨论。

最新更新