找不到任何获取请求标头的方法

时间:2018-12-26 07:29:40

标签: vba excel-vba web-scraping request-headers

我正在尝试使用vba获取request headers。在类似python的其他语言中,有一种非常简单的方法来获取.headers。但是,在vba的情况下,我会卡住。 我知道vba中有一种方法可以使用response headers来获取.getAllResponseHeaders

  

如何使用vba获得request headers

这就是我得到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 :(得分:3)

Python .headers(假设使用requests库)提供响应标头,而不是请求标头。您可以在get传递的字典中添加自定义请求标头。正如您所看到的,您可以使用getAllResponseHeaders在vba中读取响应标头,并在键,值对中使用setRequestHeader发送自定义标头。

我通常会使用诸如Fiddler / Dev工具的“网络”选项卡/ Wireshark之​​类的东西来查看发送了哪些请求标头,然后模仿这些请求标头,或者阅读相关的API指南,以指定期望的自定义​​请求标头。

这是该网址的Fiddler请求标头捕获的快照

enter image description here

WinHTTP可能有一种使用winhttpqueryheaders的方法,但是研究还不够,在大多数情况下,仅使用“网络”选项卡要简单得多。

没有与xmlhttp请求/响应关联的方法来获取请求标头。看看specification(WHATWG居住standard)中的相关方法(可能是VBA实现中的一些变化):

要处理cookie,请查看MSXML2.ServerXMLHTTP。 Example

答案 1 :(得分:0)

您应该使用.setRequestHeader()方法以编程方式设置请求标头,否则它将成为默认的IE设置。 为什么您需要取回已经获得的数据?