javascript - puppeteer request.continue 无法使用覆盖的 header 主机

标签 javascript puppeteer

告诉我们您的环境:

  • puppeteer 版本:1.19.0
  • 平台/操作系统版本:Debian 9
  • URL(如果适用):
  • Node.js 版本:8

  • 预期的结果是什么?
    我想在 header 中覆盖请求的主机。
    如请求url:http://a.com/x.jpg . DNS 解析器可能会将主机解析为较慢的 ip 地址,但我知道有一个更好的 ip,例如 1.2.3.4 .我想用 ip 地址更改 url 并修改请求 header 中的主机。
    喜欢来自 curl http://a.com/x.jpgcurl --header "Host:a.com" http://1.2.3.4/x.jpg 相反会发生什么?
    await page.setRequestInterception(true);
    
    page.on('request', request => {
      const newHeaders = Object.assign({}, request.headers(), {
        Host: 'a.com'
    });
    
    request.continue({ headers: newHeaders, url: 'http://1.2.3.4/x.jpg' });
    
    但它不起作用

    最佳答案

    您应该使用 request.respond 来覆盖标题,如下所示:

     page.on('request', request => {
      request.respond({
            headers:{...request._headers,your_new_header_key:value},
            body
      })
    });
    

    关于javascript - puppeteer request.continue 无法使用覆盖的 header 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60539833/

    相关文章:

    javascript - 使用 JS.call 时出现奇怪的错误消息?

    node.js - 如何修复 Node.js puppeteer keyboard.type() 导致 TypeError

    javascript - 在 puppeteer 中将屏幕截图转换为 pdf

    node.js - puppeteer:在 DevTools 的网络选项卡中访问特定请求的 JSON 响应

    node.js - Puppeteer 并未提取所有元素

    javascript - 为什么 PhpStorm 在我的 JavaScript 声明中将其突出显示为错误

    javascript - 如何设置 XDomainRequest 对象的内容类型?

    javascript - GET 数据未通过 AJAX 调用发送

    javascript - 检测点击是否在 OverlayView 内部

    node.js - 如何在 Puppeteer 中单击弹出/新选项卡窗口中的元素