Http-запрос VBA ответ - PullRequest
0 голосов
/ 10 ноября 2018

Делаю мои первые шаги по HTTP в VBA. Уже удалось получить значение 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 и чего-то, что я не могу найти. Последние 5 чисел из ETag меняются в имени файла. Например: ETag - 1543932096000 Файл - 1543932095115.xxxxx.address.com.5245.idp.pdf Поскольку у меня нет имени файла, я не могу скачать файл с помощью httprequest. Помощь

...