javascript - 如何使用 Puppeteer 和 Chrome DevTools 协议(protocol)修改请求 header ? (可能是JS语法问题)

标签 javascript node.js typescript puppeteer chrome-devtools-protocol

我有以下 Typescript 函数,假设已经使用 Puppeteer 启动了 Chrome 浏览器。下面使用的 Fetch 函数的文档可以在 here 找到。 .

async function modify(client: CDPSession) {
    client.on('Fetch.requestPaused', async ({ requestId, request, frameId, resourceType, responseErrorReason, responseStatusCode, responseHeaders, networkId }) => {
        // Correctly prints out the User-Agent header's value
        console.log(request.headers["User-Agent"]);

        // After this line is run, I can inspect the request.headers object and see that User-Agent was successfully edited
        request.headers['User-Agent'] = 'trying to edit this header';

        // Continuing the request gives an error
        await client.send('Fetch.continueRequest', {
            requestId: requestId,
            headers: request.headers,
        });
    });
}

这是我看到的具体错误:

Error: Protocol error (Fetch.continueRequest): Invalid parameters headers: array expected

如何解决此错误并成功修改 request.headers?这是一个我无法弄清楚的愚蠢的 Javascript/Typescript 语法问题吗?

最佳答案

Fetch.requestPaused将 header 作为对象返回。例如:

{
    "Upgrade-Insecure-Requests":"1",
    "Accept": "text/html,application/xhtml+xml"}
}

Fetch.continueRequest预计 Array<{name: string, value: string}> 。例如

[
    {"name": "Accept", value: "text/html,application/xhtml+xml"}
]

您可以使用 Puppeteer 正在使用的代码:

function headersArray(headers) {
  const result = [];
  for (const name in headers) {
    if (!Object.is(headers[name], undefined))
      result.push({name, value: headers[name] + ''});
  }
  return result;
}

关于javascript - 如何使用 Puppeteer 和 Chrome DevTools 协议(protocol)修改请求 header ? (可能是JS语法问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596953/

相关文章:

javascript - 从表中获取所有第一个子元素

node.js - 实现路由器时出错

typescript - 如何正确地将 .js 库添加到我的应用程序,以便我可以将它们导入 TypeScript 模块

javascript - 创建对象时如何在属性中给出数组索引

javascript - Vert.x:从 Java 部署 JavaScript Verticle 失败

node.js - 如何将信息从 NodeJS 服务器发送到客户端?

javascript - 如何将 Node 函数的结果写入 html/console 日志?

typescript - 有什么方法可以检查对象是否是 TypeScript 中的枚举类型?

javascript - React 新手 => 元素类型无效 : expected a string

javascript - php 和 javascript 中的数组