【问题标题】:Using a IE 11 Cookie in a vbscript WinHttp.WinHttpRequest.5.1 GET [duplicate]在 vbscript WinHttp.WinHttpRequest.5.1 GET 中使用 IE 11 Cookie [重复]
【发布时间】:2019-10-08 05:46:28
【问题描述】:

我正在尝试使用 WinHttp.WinHttpRequest.5.1 提取网站数据。该网站需要登录,cookie 存储在 IE11 中。 WinHttp.WinHttpRequest.5.1 创建它自己的实例,因此不会登录到请求的网站。有没有办法在 WinHttp.WinHttpRequest.5.1 请求中使用来自 IE11 的活动 cookie?

myURL = "https://postman-echo.com/get?foo1=bar1&foo2=bar2"
Set oXMLHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
oXMLHttp.Open "GET", myURL , False
oXMLHttp.send
    ohtmlFile.Write oXMLHttp.responseText
    ohtmlFile.Close

【问题讨论】:

  • 看看Retrieve ALL cookies from Internet Explorer。在答案中,cookie 是从 IE 文件夹中的文本文件中检索的。如果您只需要登录 API,我建议您直接在 HTTP 请求中传递所需的凭据。

标签: vbscript internet-explorer-11 winhttp winhttprequest


【解决方案1】:

您可以尝试使用 WinHttpRequest GetResponseHeader 方法或解析 GetAllResponseHeaders 方法结果来获取 cookie 值。然后,使用 SetRequestHeader 方法添加、更改或删除 HTTP 请求标头。更多详情请查看this articlethis thread

【讨论】:

  • 我认为他在初始请求中没有 cookie 值,这就是他想要得到的。他无法从响应中获取它们,因为他无法在没有 cookie 的情况下发出请求。
【解决方案2】:

如果网站需要登录,通常您可以使用 HTTP 基本身份验证 提供该信息。这通常通过添加一个特殊的标头(Authorization)来完成,我们添加username:passwordbase64 编码。

您的代码可能如下所示:

Dim sAuthorization
sAuthorization = "Basic Zm9vOmJhcg=="

oXMLHttp.Open "GET", myURL , False
oXMLHttp.setRequestHeader "Authorization", sAuthorization
oXMLHttp.send

不过,这取决于 API,您可以检查身份验证要求。它可以使用不同的方法,您可能不需要对username:password 进行编码。有时您会提供 API 密钥。无论使用哪种方法,您都应该能够在 HTTP 请求中提供所需的身份验证。

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2016-07-20
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多