Делаю мои первые шаги по 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.
Помощь