VBA下载表单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

该网站需要登录,然后重定向到其他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("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进行重定向。很好,我想这需要启用。