【问题标题】:Unable to use "request" library with headers无法使用带有标题的“请求”库
【发布时间】:2020-09-17 05:02:05
【问题描述】:

使用 Chrome 开发工具,我可以看到所有的请求。我想使用脚本复制其中一个。该请求是可复制的,因为从开发工具重播它是可行的。我正在使用此代码:

let request = require("request");
request.put("<hidden>", {
    "headers": {
        ":authority": "<hidden>",
        ":method": "PUT",
        ":path": "/api/<hidden>",
        ":scheme": "https",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "en-US",
        "authorization": "<hidden>",
        "content-length": "0",
        // and more
    }
}, (err, response, body) => {
    console.log(err);
    console.log(response.statusCode);
    console.log(body);
});

控制台说:

TypeError [ERR_INVALID_HTTP_TOKEN]: Header name must be a valid HTTP token [":authority"]
    at ClientRequest.setHeader (_http_outgoing.js:487:3)
    at new ClientRequest (_http_client.js:221:14)
    at Object.request (https.js:309:10)
    at Object.request (C:\Users\Admin\AppData\Roaming\npm\node_modules\puppeteer-core\node_modules\agent-base\patch-core.js:25:22)
    at Request.start (C:\Users\Admin\AppData\Roaming\npm\node_modules\request\request.js:751:32)
    at Request.end (C:\Users\Admin\AppData\Roaming\npm\node_modules\request\request.js:1505:10)
    at end (C:\Users\Admin\AppData\Roaming\npm\node_modules\request\request.js:564:14)
    at Immediate._onImmediate (C:\Users\Admin\AppData\Roaming\npm\node_modules\request\request.js:578:7)
    at processImmediate (internal/timers.js:439:21) {
  code: 'ERR_INVALID_HTTP_TOKEN'
}

我尝试不使用.put(),或指定methodbody 属性。结果相同。

【问题讨论】:

  • 那个库是deprecated。但是为什么你有带有:前缀的标题?
  • 这就是它们在 devtools 中的显示方式。同样没有:,请求似乎失败了
  • 但是那些“标头”似乎只是重复了请求的 URI 和方法。实际上,对于所有 &lt;hidden&gt;,我们无能为力,没有 minimal reproducible example 可以复制。
  • // and more。没有它们就行不通,所以我想和它们一起尝试
  • 还有什么?到那时,无论如何您都已经脱离了无效的冒号前缀标头,因此尚不清楚它们是否相关。

标签: node.js request http-headers google-chrome-devtools request-headers


【解决方案1】:

以冒号开头的标题是“伪标题”。您实际上并没有使用 request() 库自己发送它们,因为它们是非法的 http 1.1 标头格式。

您可以在此处阅读有关它们的信息:Purpose of pseudo colon-header fields

您应该能够删除所有伪标头,并确保它们中的信息在您的请求中的其他地方(url、方法等)正确指定,它们通常已经是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2016-03-06
    • 2017-11-20
    • 2016-10-25
    • 2017-08-31
    相关资源
    最近更新 更多