Vbscript 获取 WinINET API 的代理配置

Posted

技术标签:

【中文标题】Vbscript 获取 WinINET API 的代理配置【英文标题】:Vbscript Get proxy config for WinINET API 【发布时间】:2015-04-01 09:47:44 【问题描述】:

我正在尝试向内部网络服务器发送 HTTP 获取,这工作正常,除非由于重新路由的原因,用户必须遍历代理才能访问网络服务器,然后我只收到 WinInet 12029 错误“ERROR_INTERNET_CANNOT_CONNECT 连接服务器的尝试失败。”请你能帮我提取现有的 Internet 选项代理配置吗?我不想静态定义代理凭据(我也没有尝试过)。

我的代码:

Function HTTPGet1
Dim o, URL, stat

URL = myURL
On Error Resume Next 
Set o = CreateObject("Microsoft.XMLHTTP")
' If Err.Number <> 0 Then
  'msgbox err.Number & err.Description
   'msgbox "cake" 
   'Exit Function
' End if
o.WinHttpGetIEProxyConfigForCurrentUser
o.open "GET", URL, False
o.send
stat = o.Status 'CInt(o.Status)
if stat = "200" then 
  msgbox "Account created successfully."
elseif stat = "" then
  msgbox "Connection attempt failed due to: " & err.description & "."
  err.clear
else
  msgbox "HTTP error code " & stat & " received."
end if
end function

感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

使用最新版本的 ServerXMLHTTP 对象

Set xHttp= CreateObject("MSXML2.ServerXMLHTTP.6.0")
xHttp.Open "POST", SERVER_URL, data, False
xHttp.setProxy 2, "<Your proxy URL>:<PORT>", ""
xHttp.send 
response = xHttp.responseText

msgbox xHttp.status & "|" & xHttp.statustext
msgbox "Response for get call is :" & response

【讨论】:

【参考方案2】:

pcap 发现服务器正在响应 SSL 证书错误,此 API 无法响应。我将它换成 MSXML2.ServerXMLHTTP.6.0,然后能够处理主机名不匹配。

Function HTTPGet1
Dim o, address, caseNo, URL, stat

URL = myURL
On Error Resume Next 
Set o = CreateObject("MSXML2.ServerXMLHTTP.6.0")
 If Err.Number <> 0 Then
   msgbox err.Number & err.Description
   err.clear
   Exit Function
 End if
o.setOption 2, SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
o.open "GET", URL, False
o.send
stat = o.Status

参数 'SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS' 只是 API 可用的选项之一,这个选项不是最安全的。

【讨论】:

以上是关于Vbscript 获取 WinINET API 的代理配置的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 wininet 获取 POST 请求响应

<WinInet.h> API 中的 InternetOpenUrl 和 InternetReadFile 帮助

在 wininet 中使用 InternetConnect() API 后,如何判断我是不是仍然连接?

使用 wininet.dll api 从 FTP 站点搜索和检索文件名

WinInet API 的代理服务器有啥特殊设置吗?

wininet api 将文件发送到 http web 服务