node.js - 使用 Puppeteer 捕获原始请求
问题描述
尝试通过 Puppeteer 捕获原始 HTTP 请求消息,而不是使用代理。
这是我正在做的一个基本示例。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.setViewport({ width: 1200, height: 800 })
await page.setRequestInterception(true)
page.on('request', (request) => {
console.log(request) // <-- I want raw HTTP(S) message, not an object
request.continue()
})
page.on('response', (response) => {
console.log('<<', response.status(), response.url())
})
await page.goto('https://www.google.com/')
await browser.close()
})()
当我打印出请求时,我得到了代表请求的 Node / JSON 对象。
如何获取原始请求消息?
解决方案
@openwonk,你好!
您可以使用以下方式获取原始数据:
- 简单但不是所有数据:
page.on('request', async function (request) {
// HTTP method
console.log(request.method());
// Request target, usually a URL
console.log(request.url());
// The HTTP version
// N/A
// HTTP headers
console.log(request.headers());
// Body
console.log(request.postData());
});
- 不像以前那么简单,但有完整的数据:
await page.tracing.start({ path: 'trace.json', categories: ['netlog'] });
await page.goto('http://example.com/', { waitUntil: 'networkidle0' })
const tracing = JSON.parse(await page.tracing.stop());
// Some filtering
const res = await tracing.traceEvents.filter(te => te.name.toLowerCase().includes(`${some_desired_name}`));
推荐阅读
- javascript - 在 React/React Native 中完成前一个函数时运行一个函数
- java - Maven:类路径依赖项和启动器?
- html - 如何用 v-for 显示这个动画选择?
- python - 如何将音频文件的主要频率投射到乐器的声音上
- django - 未找到带有参数 '('d', 'r', 'e', 's', 's')' 的 'product_by_catagory' 的反向操作。尝试了 1 种模式:['(?P
[-a-zA-Z0-9_]+)\\/$'] - python - 如何在 python 应用程序中使用 Typescript 类型?
- database - 预定义和自定义标签的数据库设计
- sql - 一列中的 COUNT 个总 DISTINCT 值
- angularjs - Ag-grid:在侧边栏面板外部以角度单击时隐藏列侧边栏
- r - rstatix::dunn_test 中的公式有问题