Загрузка файла с Winhttp / VBA частично успешна - PullRequest
0 голосов
/ 20 февраля 2020

Я застрял с почти полным успехом в автоматизации процесса загрузки. Я использую Fiddler и беру значения и жестко их кодирую, пока все работает. Веб-сайт безопасен, и я получаю куки в порядке. Однако при тестировании загрузки я получаю файл размером 239K, но он не открывается. Windows говорит мне, что это может быть повреждено. Размер файла должен быть 250 КБ, поэтому я знаю, что это не все. Я собирался попробовать и запустить fiddler для захвата моих кодов traffi c, но, что интересно, он фиксирует только то, что я делаю в браузере.

Я пытался:

strFullCookie = "a cookie in here"
strDocLink = "https://gateway.frontlineinsurance.com/pc/service/edge/document/gpa/document/pc:somenumberhere?token=withatokenhere&portalRoute=/AgentDocumentError"

Set WinHttpReq2 = CreateObject("WINHTTP.WinHTTPRequest.5.1")

WinHttpReq2.Open "GET", Trim(strDocLink), False
WinHttpReq2.Option(6) = False          
WinHttpReq2.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
WinHttpReq2.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
WinHttpReq2.setRequestHeader "Accept-Language", "en-US,en;q=0.9"
WinHttpReq2.setRequestHeader "Connection", "keep-alive"
WinHttpReq2.setRequestHeader "Host", "gateway.frontlineinsurance.com"
WinHttpReq2.setRequestHeader "Referer", "https://gateway.frontlineinsurance.com/"
WinHttpReq2.setRequestHeader "Upgrade-Insecure-Requests", "1"
WinHttpReq2.setRequestHeader "Accept-Encoding", "gzip, deflate"
WinHttpReq2.setRequestHeader "Sec-Fetch-User", "?1"
WinHttpReq2.setRequestHeader "Sec-Fetch-Site", "same-origin"
WinHttpReq2.setRequestHeader "Sec-Fetch-Mode", "Navigate"
WinHttpReq2.setRequestHeader "Cache-Control", "no-cache"
WinHttpReq2.setRequestHeader "Content-Type", "application/pdf"
WinHttpReq2.setRequestHeader "Cookie", strFullCookie

WinHttpReq2.Send

'MsgBox WinHttpReq2.responseBody
'MsgBox WinHttpReq2.responseText

Debug.Print WinHttpReq2.Status
strHeaders = WinHttpReq2.getAllResponseHeaders()
Debug.Print strHeaders

Sleep 2000

         If WinHttpReq2.Status = 200 Then
            Set oStream = CreateObject("ADODB.Stream")
            oStream.Open
            oStream.Type = 1
            oStream.Write WinHttpReq2.responseBody
            oStream.SaveToFile "C:\Users\JCarney\Desktop\DownloadedMail\FPITest.pdf", 2    ' 1 = no overwrite, 2 = overwrite
            oStream.Close
        End If

И я использовал:

'Set WinHttpReq2 = CreateObject("MSXML2.serverXMLHttp")
'Set WinHttpReq2 = CreateObject("Microsoft.XMLHTTP"

ServerXMLhttp отменил тот же результат, что и Winhttp. другой был отклонен сервером.

Запрос Fiddler выглядит следующим образом:

GET https://gateway.frontlineinsurance.com/pc/service/edge/document/gpa/document/pc:somenumberhere?token=sometokehere&portalRoute=/AgentDocumentError HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Referer: https://gateway.frontlineinsurance.com/
Accept-Language: en-US
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: gateway.frontlineinsurance.com
Connection: Keep-Alive
Cookie: _cookies here

ответ Fiddler выглядит следующим образом:

HTTP/1.1 200 OK
Date: Thu, 20 Feb 2020 18:45:05 GMT
Content-Type: application/pdf
Connection: keep-alive
Set-Cookie: a cookie
Set-Cookie: a cookie
Server: Apache/2.4.6 (Red Hat Enterprise Linux)
Content-Disposition: filename=Declarations Page.pdf
Vary: Accept-Encoding,User-Agent
Set-Cookie: a cookie
Set-Cookie: a cookie
Cache-Control: max-age=0, must-revalidate
Content-Length: 255177

, когда я печатаю свои возвращенные заголовки из мой код, который я получаю:

Cache-Control: max-age=0, must-revalidate
Connection: keep-alive
Date: Thu, 20 Feb 2020 18:49:50 GMT
Transfer-Encoding: chunked
Content-Type: application/pdf
Content-Encoding: gzip
Server: Apache/2.4.6 (Red Hat Enterprise Linux)
Set-Cookie: a good cookie
Set-Cookie: a good cookie
Set-Cookie: a good cookie
Set-Cookie:a good cookie
Vary: Accept-Encoding,User-Agent
Content-Disposition: filename=Declarations Page.pdf

Я получаю ожидаемые 4 куки, но мой файл короткий (pdf). Я не уверен, что еще изменить. Я пытался открыть файл как TXT или html, его гиббери sh, но много гиббери sh. Просто не идеальный PDF. Заранее благодарю за идеи о том, что я могу настроить.

...