Не могу найти способ получить заголовки запроса - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь получить request headers, используя vba.В других языках, таких как python, есть очень простой способ получить это .headers.Однако в случае с vba я застреваю.Я знаю, хотя в VBA есть способ получить response headers с помощью .getAllResponseHeaders.

Как я могу получить request headers с помощью VBA?

Этокак я получил response headers:

Sub GetRequestHeaders()
    Const URL$ = "https://stackoverflow.com/questions/tagged/web-scraping"
    Dim Http As New XMLHTTP60, S$

    With Http
        .Open "GET", URL, False
        .send
        S = .getAllResponseHeaders
        MsgBox S
    End With
End Sub

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Python .headers (при условии использования библиотеки requests) предоставляет заголовки ответа, а не заголовки запроса.Вы добавляете заголовки пользовательских запросов в dict, передаваемый с get.Как вы уже видели, вы можете читать заголовки ответов в vba с getAllResponseHeaders и отправлять пользовательские заголовки с setRequestHeader в ключе, парах значений.

Я обычно использовал бы что-то вроде Fiddler / Dev tools network tab / Wiresharkчтобы увидеть, какие заголовки запроса отправляются, имитируйте их или прочитайте соответствующее руководство API, указывающее, какие настраиваемые заголовки запроса ожидаются.

Вот снимок захвата заголовка запроса Fiddler для этого URL

enter image description here

Возможно, WinHTTP может использовать winhttpqueryheaders , но недостаточно исследован, и в большинстве случаев гораздо проще использовать вкладку сети.

Нет способа, связанного с запросом / ответом xmlhttp, чтобы получить заголовки запроса.Взгляните на спецификацию (WHATWG living standard ) для связанных методов (могут быть некоторые различия в реализации VBA):

image

Чтобы разобраться с куки, посмотрите MSXML2.ServerXMLHTTP. Пример * * одна тысяча тридцать одна. * * Тысяча тридцать две

0 голосов
/ 26 декабря 2018

Вы должны установить заголовки запроса программно с помощью метода .setRequestHeader (), иначе это будут настройки IE по умолчанию.Зачем вам нужно возвращать данные, которые вы уже получили?

...