Вопрос по аутентификации через безопасный веб-сайт winhttp - PullRequest
0 голосов
/ 26 января 2019

Я прочитал немало тем на эту тему, но мне нужно нажать в правильном направлении. Я пытаюсь скачать PDF-файлы с безопасного сайта. Я могу войти через InternetExplorer с помощью автоматизации VBA и успешно перемещаться по веб-странице. Это требование, потому что мне нужно получить список файлов и создать URL-адреса. Что я могу сделать.

Я пытаюсь загрузить файлы с помощью winnhttp 5.1, и код загрузки работает, если я вручную передаю ему 6 файлов cookie из fiddler. Вот где я застрял на том, что, я думаю, не является слишком сложной частью. На сегодняшний день я получил печенье в двух партиях. Из document.cookie мне достается 4, включая authToken. Из моего потока winhttp я получаю два файла cookie только для http, включая идентификатор сеанса ASP, но в конце концов я понял, что эти два действительно разные "сеансы". Два http куки из того, что я понимаю, никогда не будут выставлены в document.cookie. Но так как я получаю их в моем потоке winhttp, я думаю, что я в порядке там.

This is my first call that nets me the two http cookies


WinHttpReq.Open "POST", strUrl, False
WinHttpReq.setRequestHeader "Cache-Control", "no-cache"
WinHttpReq.setRequestHeader "Referer", "https://atlasbridge.com/default.aspx"
 WinHttpReq.setRequestHeader "X-MicrosoftAjax", "Delta=true"
 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 "Accept", "*/*"
 WinHttpReq.setRequestHeader "Accept-Language", "en-US"
 WinHttpReq.setRequestHeader "Accept-Encoding", "gzip, deflate"
 WinHttpReq.setRequestHeader "Host", "atlasbridge.com"
 WinHttpReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"
 'uname & password are established earlier in the code & are the correct values
WinHttpReq.SetCredentials UName, Pword, 0
WinHttpReq.Send

Я могу разобрать куки, я вернусь, я уверен. Мне просто нужно вернуть первые 4 куки, включая токен аутентификации. Я думаю, что мне нужно будет отправить несколько запросов на веб-сайт, а затем на страницу отчетов (один файл cookie меняется с домашней страницы на отчеты), но так как мне нужны имя пользователя и пароль для аутентификации, как это сделать, я делаю это в winhttp (или я использую другой mwthod). Я могу войти на страницу, но это не дает мне файлы cookie только для http, поэтому мне нужно пройти аутентификацию другим способом (я предполагаю).

p.s. как я захватил и разобрал куки и добрался до этого момента. Как загрузить файл с защищенного веб-сайта с помощью WinHTTPRequest.5.1

Я обновил код в вопросе, но я все еще не уверен, как пройти аутентификацию с помощью winhttp.

ответ, который я получаю (где два куки, которые я получаю, но не остальные 4, которые мне нужны: СОСТОЯНИЕ: 200 ОК Cache-Control: приватный Дата: пн, 28 января 2019 19:45:23 GMT Длина контента: 2033 Content-Type: text / html; кодировка = UTF-8 Контент-кодировка: gzip Сервер: Microsoft-IIS / 7.0 Set-Cookie: ASP.NET_SessionId = xxxxxxxxxx; Путь = /; обеспечения; HttpOnly Набор файлов cookie: NSC_bumbtcsjehf.dpn_TTM_443xxxxxxxxxxxxxxxx; Версия = 1; Макс. Возраст = 2400; путь = /; безопасный; httponly X-AspNet-версия: 4.0.30319 X-UA-совместимый: IE = край X-Powered-By: ASP.NET Длина Cteonnt: 4489

Также с помощью Fiddler я вижу в текстовом представлении: ScriptManager1 = UpdatePanel1% 7CcmdLogin & __ EventTarget = & __ EVENTARGUMENT = & __ VIEWSTATE = 6mcXww3ohBjEvWka9jUmRYsQUSnYbYvMovHGR6aC% 2BUr5hum9HsnxvbQYFOUuvkWDHWcIz5hftDgGPlmEOUJUqC11qvzFgYZh24% 2FDDMPA6e0A7AeaAWc0mRfrrbYjbUeUvPE38g% 3D% 3D & __ VIEWSTATEGENERATOR = CA0B0334 & __ EVENTVALIDATION = 5XlJ8vCmmt4cJhBg5XYEHmCDfdimT2% 2FjpQGEczZ7weYVU3RB% 2BZzR7pLr2RN% 2F6ooiMEnAs6DMB26% 2F3fXnRVrNpvT6Qaj62mNxwriRgMUs2WY5e538aZbVQ1dXouLb1cAAnPt% 2BOfWGWfumid1o3Eg% 2FYOyuvRA% 3D & txtUserName = MyUsernamevaluehere & txtPassword = MyPasswordvaluehere & __ ASYNCPOST = истина & cmdLogin.x = 33 & cmdLogin.y = +15,569999694824218

Fiddler показывает, что первым запросом "Post" является XMLHttpRequest. Я все еще получаю только 2 куки (те же 2).

...