Отправлять HTTP-запросы после перехода на страницу как отдельные запросы для веб-сканирования (сайт Angular)

Моя компания недавно перешла на новую версию iManage (система файлового архива), и в ней больше нет библиотек, доступных для VBA. В соответствии с политикой компании я могу запускать VBA, но не могу создавать надстройки VSTO/.NET.

Я пытаюсь исправить надстройку, которая инвентаризирует все элементы в папке/подпапках.

Решение, которое я сейчас изучаю, состоит в том, чтобы перейти к папке на новом веб-портале, а затем выполнить инвентаризацию оттуда. Я, вероятно, могу использовать классический веб-сканер и щелкать ссылки в браузере, но это будет медленно и довольно уродливо. Поскольку это приложение Angular, я думаю, что должен иметь возможность запускать запросы REST и анализировать ответы, не дожидаясь загрузки страницы.

У меня проблема с возвратом InvalidToken как неудачного.

{
  "error": {
    "code": "InvalidToken",
    "message": "X-Auth-Token is invalid or missing"
  }
}

Текущее решение состоит в том, чтобы создать объект WebBrowser в пользовательской форме в Excel VBA. Эта пользовательская форма ведет на наш портал iManage. Затем я могу перемещаться по сайту и нажимать кнопку для запуска запросов.

Private Sub CommandButton1_Click()
    Debug.Print WebBrowser1.Busy
    
    Dim Doc As HTMLDocument
    Set Doc = WebBrowser1.Document
    Debug.Print Doc.cookie

    Dim Request As New WinHttpRequest
    Request.Open "GET", Url:="https://imanage.xxxx.com/work/web/api/v2/customers/1/libraries/CLIENT-JOB/tabs/CLIENT-JOB!9975487/children?limit=500&offset=0&total=true", ASync:=False
    Request.setRequestHeader "Content-Type", "application/json"
    Request.setRequestHeader "Accept-Encoding", "gzip, deflate, br"
    Request.setRequestHeader "Accept-Language", "en-GB,en-US;q=0.9,en;q=0.8"
    Request.setRequestHeader "Connection", "keep-alive"
    Request.setRequestHeader "Host", Doc.Location.host
    Request.setRequestHeader "Referer", Doc.Location.href
    'Request.setRequestHeader "Cookie", WebBrowser1.Document.cookie
    Request.setRequestHeader "Set-Cookie", WebBrowser1.Document.cookie
    Request.setRequestHeader "X-XSRF-TOKEN", Split(Split(WebBrowser1.Document.cookie, ";")(2), "=")(1)
    Request.send

    Dim Result As String
    Result = Request.responseText
    Debug.Print Result
    
End Sub

Private Sub UserForm_Initialize()
     WebBrowser1.Navigate2 "https://imanage.XXXXX.com/work/web/r/custom2/recent-custom2?exclude_emails=true&scope=Admin,AdminArchive,Client-Job,JobArchive&p=1"
End Sub

Я чувствую, что это повторяет вызовы запросов, которые я вижу в Chrome.
Сведения о запросе Chrome

Я думаю, что большая часть проблемы заключается в том, что HTMLDocument, который я вижу в веб-браузере, никогда не перечисляет все те же файлы cookie, которые я вижу в Chrome.

Объект в VBA

введите здесь описание изображения


person Dave Scott    schedule 05.05.2021    source источник


Ответы (1)


Файлы cookie, помеченные как HttpOnly на последнем снимке экрана, невозможно получить с помощью document.cookie.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

Файл cookie с атрибутом HttpOnly недоступен для JavaScript Document.cookie API; он отправляется только на сервер. Например, файлы cookie, сохраняющие сеансы на стороне сервера, не обязательно должны быть доступны для JavaScript и должны иметь атрибут HttpOnly. Эта мера предосторожности помогает смягчить атаки межсайтового скриптинга (XSS).

Возможно, вы можете попробовать: Получить ВСЕ файлы cookie из Internet Explorer

person Tim Williams    schedule 05.05.2021
comment
там орлиные глаза! - person QHarr; 06.05.2021