我正在使用此VBA功能从网站检索数据。该功能对我来说很好。但我不确定它是否适用于可能受其公司强加的互联网访问限制的客户。我如何确定它能在每台计算机上运行?我应该添加代理吗?我该怎么办?
'func1 and func2 are strings used to compose the URL
Function cmd(func1 As String, func2 As String)
Dim objHTTP
Dim aux
Dim url As String
'Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
url = "https://www.comdinheiro.com.br/Clientes/ServerToExcel/S2E_TESTANDO001.php?func1=" & func1 & "&func2=" & func2
objHTTP.Open "GET", url, False
objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
'objHTTP.SetProxy 2, "proxyserver:8080", ""
objHTTP.SetProxy HTTPREQUEST_PROXYSETTING_PROXY, "ProxyServerName"
objHTTP.Send ("")
aux = objHTTP.responseText
cmd = Trim(aux)
End Function
答案 0 :(得分:1)
关于代理。如果您的代码应该在通过代理访问互联网的PC上启动,那么IE中用户与互联网的连接就从对话框开始,如
或者{{ 0}}
然后你可以在open method article中描述的objHTTP.Open
的第四和第五个参数中添加用户和密码:
objHTTP.Open "GET", url, False, user, password
注意,您不得在代码中存储任何密码,以提交您必须在代码开头提示用户输入密码的凭据。
同时分析VBA Err.Number
是否存在-2146697211(800C0005)和#34等错误;系统无法找到指定的资源。",-2147024891(80070005)"访问被拒绝。 #34;等等,而来自status property article的objHTTP.Status
将帮助您找出错误的原因,并处理它,如果有的话:
' ... previous code implementing .open method
On Error Resume Next
objHTTP.Send ("")
EN = Err.Number
On Error Goto 0
' check if EN is not equal 0 (-2146697211, -2147024891, ..)
ST = objHTTP.Status
' check if ST is not equal 200
首先,如果互联网访问是通过代理并且需要身份验证,您应该在代码中找出答案。为了让你的代码能够正常工作,你可以创建两个函数来返回创建的HttpRequest对象:第一个用于非代理互联网访问,第二个用于代理授权。
注册表项也可以提供帮助: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ProxyEnable HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ProxyServer
通常,正如@Degustaf所写,您必须在不同的PC上测试您的代码,以确保您的代理检查和授权算法正常工作。