VBA下载表单URL,带有重定向到另一个表单的登录名
该网站需要登录,然后重定向到其他url,然后下载文件 此函数适用于url,无需重定向,但不适用于我的案例VBA下载表单URL,带有重定向到另一个表单的登录名,vba,winhttprequest,Vba,Winhttprequest,该网站需要登录,然后重定向到其他url,然后下载文件 此函数适用于url,无需重定向,但不适用于我的案例 Function DownloadFile(URL As String, Path As String, UserName As String, Password As String) As Boolean DownloadFile = False Dim WinHttpReq As Object Set WinHttpReq = CreateObject("MS
Function DownloadFile(URL As String, Path As String, UserName As String, Password As String) As Boolean
DownloadFile = False
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("MSXML2.ServerXMLHTTP.6.0")
WinHttpReq.Open "GET", URL, False, UserName, Password
WinHttpReq.send
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile Path, 2
oStream.Close
DownloadFile = True
End Function
当我尝试此代码时,状态为401,即使我使用用户名和密码
Function CheckStatus(ByVal strUrl As String, ByVal UserName As String, ByVal Password As String) As String
Const WinHttpRequestOption_EnableRedirects = 6
Dim oHttp As Object
Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
oHttp.Option(WinHttpRequestOption_EnableRedirects) = True
oHttp.Open "GET", strUrl, False, UserName, Password
oHttp.send
CheckStatus = oHttp.Status
End Function
默认情况下,WinHttp将遵循重定向。下面是如何使用WinHttp处理用户名和密码
Function DownloadFile(ByVal URL As String, ByVal path As String, ByVal UserName As String, ByVal Password As String) As Boolean
DownloadFile = False
Const HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
Dim WinHttpReq As Object
Dim oStream As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
WinHttpReq.Open "GET", URL, False
WinHttpReq.SetCredentials UserName, Password, HTTPREQUEST_SETCREDENTIALS_FOR_SERVER
WinHttpReq.send
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.SaveToFile path, 2
oStream.Close
DownloadFile = True
End Function
这回答了你的问题吗?这里有更多相关代码:底线是,改用
WinHttp.WinHttpRequest
,并启用follow redirects选项。或者继续使用MSXML2.ServerXMLHTTP
对象,查看响应状态(301或302)和响应头(Location
),即手动执行重定向。@Tomalak它是302…和?这就是HTTP身份验证的工作原理。每一个请求都必须有用户名和密码。很感谢你一直坚持,弄清楚并公布你的工作结果。(虽然我在那里没有看到任何与重定向相关的内容……这不再需要了吗?@Tomalak是的,不需要额外的代码,WinHttp将按照defaultAhhh进行重定向。很好,我想这需要启用。