Как обработать ошибку 302, используя winhttp & VBA - PullRequest
0 голосов
/ 12 февраля 2020

Я продолжаю поиски в своей базе данных возможности загружать файлы из компании, с которой мы работаем. Я использую fidler при входе в систему через браузер и наблюдаю, что происходит во время загрузки файла. В основном я могу создать работу, чтобы получать куки, а затем использовать ее для автоматизации загрузки. Этот веб-сайт сложен, и я определил, какой повар ie мне нужен, используя скрипку. Я копирую необработанный текст из fiddler, чтобы выполнить загрузку и посмотреть, дает ли он хороший файл. Теперь я пытаюсь достать этого повара ie. Когда я отправляю запрос winhttp GET, я получаю большинство ожидаемых файлов cookie, но не тот, который мне нужен. Я получаю статус 302 - перенаправление. Теперь я прочитал, что заголовок "location" говорит мне отправить второй запрос на URL адреса. Я копирую из скрипача. он отличается от моего первого, но возвращает те же куки. Также мой первый запрос, заголовок местоположения возвращает другой ответ, чем Fiddler. Я не уверен, как двигаться дальше отсюда. Я попытался добавить файлы cookie, полученные в запросе 1, но в этом случае я ничего не получаю. Я включил и выключил перенаправление включения в Winhttp. Я попробовал запрос XML (почти не получает куки). Кто-нибудь может указать мне в правильном направлении. Что я должен смотреть в скрипач? Мой базовый c запрос выглядит так:

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

WinHttpReq.Open "GET", Trim(strURL), False            'post request
WinHttpReq.setRequestHeader "Cache-Control", "no-cache"
WinHttpReq.Option(6) = False    'enable redirects
'WinHttpReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
'WinHttpReq.setRequestHeader "Referer", "https://www.foragentsonly.com/login/"   'in case the server cares
WinHttpReq.setRequestHeader "Accept", "text/html, application/xhtml+xml, image/jxr, */*"
WinHttpReq.setRequestHeader "Accept-Language", "en-US"
WinHttpReq.setRequestHeader "Accept-Encoding", "gzip, deflate"
WinHttpReq.setRequestHeader "Host", "servicing1.foragentsonly.com"
WinHttpReq.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
WinHttpReq.setRequestHeader "Connection", "keep-alive"
WinHttpReq.setRequestHeader "Cookie", strFullCookie

WinHttpReq.Send
strHeaders = WinHttpReq.getAllResponseHeaders()

Заранее благодарю за любые советы или комментарии. Я также могу опубликовать некоторую информацию от Fiddler. -Jim

Редактировать: запрос fiddler

GET https://servicing1.foragentsonly.com/xps.web/scripts/DisplayPage.aspx?Page=PolSrv.Common.ExternalEntryPoint&FinalDest=Documents.ArchivePDFList&Location=BunkerEast&SessionType=FAORetrieveDocuments&OTG=qV2pgILPkAQczD-ZtExJiJKEzwpix-4LXL6y4bI8BbDI0UT90&OfferingId=ExecuteUITransactionFAORetrieveDocuments&transNum=&Act=&AccessType=FAO&Brand=&ContentGroup=&Tab=NoTab HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
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
Connection: Keep-Alive
Host: servicing1.foragentsonly.com
Cookie: bunch of cookies here

ответ:

HTTP/1.1 302 Found
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Expires: -1
Location: https://servicing1.foragentsonly.com/xps.web/scripts/DisplayPage.aspx?Page=Documents.ArchivePDFList&Location=BunkerEast&SessionType=FAORetrieveDocuments&OfferingId=ExecuteUITransactionFAORetrieveDocuments&transNum
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
Set-Cookie: 
Set-Cookie: 
Set-Cookie: 
Set-Cookie: the cookie i want is here
Set-Cookie: 
Set-Cookie: 
Set-Cookie: 
Date: Thu, 13 Feb 2020 15:38:52 GMT
Content-Length: 6070

Я удалил фактические файлы cookie и изменил отображаемые URL-адреса. Стоит отметить, что повар ie, который я ищу, находится на странице веб-сайта после того, как мы уже вошли в систему. Поэтому я не отправляю пароль в этом запросе, только файлы cookie, найденные на предыдущих страницах. Я получаю партию файлов cookie только для http по моему первому запросу, это перенаправление, которое, я думаю, даст мне тот, который я хочу. Также в моем запросе WinHTTP я получаю местоположение, которое отличается. это выглядит так: Местоположение: /xps.web/scripts/SessionTimeout/TimeoutFAO.aspx вместо того, что я написал выше.

...