Http请求VBA响应

时间:2018-11-10 12:15:37

标签: vba web-scraping xmlhttprequest winhttp

在VBA中进行HTTP的第一步。 已经设法获取Cookie值以便发出请求。我遇到的问题是我要下载的文件不在第一个响应中。当我使用HTTP Header Live分析时,浏览器会收到多个响应,只有最后一个响应是文件,即用户发送查询后生成的PDF。我唯一得到的是我使用MsgBox显示的第一个响应。有人可以帮我解决这个问题。通过网络进行了一些搜索,但还没有找到解决方案。

我使用的代码是:

Sub Test()

    Dim WinHttpReq As Object

    Set WinHttpReq = CreateObject("WinHTTP.WinHTTPrequest.5.1")
    With WinHttpReq
        .Open "POST", myURL, False ', "username", "password"
        .send
        x = .getResponseHeader("Set-Cookie")
        i = InStr(x, ";")
        x = Left(x, i - 1)
        MsgBox x
    End With
    With WinHttpReq
        .Open "GET", myURL, False
        .Option(WinHttpRequestOption_EnableRedirects) = True
        .SetRequestHeader "Content-Type", "application/pdf"
        .SetRequestHeader "Accept-Encoding", "gzip, deflate, br"
        .SetRequestHeader "Cookie", x
        .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"
        .send
    End With
    MsgBox (WinHttpReq.getAllResponseHeaders())
    If WinHttpReq.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
        With oStream
            .Type = 1
            .Open
            .Write WinHttpReq.responseBody
            .SaveToFile "C:\Users\xxx\Desktop\file.pdf", 2
            .Close
        End With
    End If
    Set WinHttpReq = Nothing
    Set oStream = Nothing

End Sub

使用Firefox进行分析,当我输入URL时,会收到两个响应,并显示200 OK。我想知道如何获得第二个答复?该站点使用JavaScript解释我发送的查询并返回PDF文件。文件名根据用户和查询而变化。

现在,我谈到了以下几点。我第一个请求获取cookie,然后第二个请求从不同的地址获取ETag。问题是,当我发出第三个请求下载文件时,文件名显然是由服务器(APACHE?)根据ETag和我找不到的东西生成的。 ETag中的最后5个数字在文件名中更改。 例如: ETag-1543932096000 文件-1543932095115.xxxxx.address.com.5245.idp.pdf 由于我没有文件名,因此无法使用httprequest下载文件。 帮助吗?

0 个答案:

没有答案