首页 > 解决方案 > 通过 VBscript 连接到 SOCKS5 代理

问题描述

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

尽管凭据正确(检查了 5 次),但我在线收到Parameter is Incorrect错误消息。xmlhttp.setProxyCredentials username, password

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

标签: vbscriptsocks

解决方案


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_proxyother_proxy 使用 http_proxy 进行任何 HTTP 操作,而 HTTPS 协议使用名为 other_proxy 的代理。

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

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

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

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


推荐阅读