木偶集请求Cookie标头

时间:2020-05-12 06:21:05

标签: puppeteer

我试图通过Puppeteer请求拦截在每个请求上设置cookie。我注意到,设置headers['sample-header']=1会创建标头'sample-header'等于1,设置headers['cookie'] = x...不会设置请求cookie。例如,以下代码未设置任何请求cookie。

const browser = await puppeteer.launch({headless: false,executablePath:dirnae});
const page = await browser.newPage();
const client = await page.target().createCDPSession();

await page.setRequestInterception(true);

page.on('request', request => {
    const headers = request.headers();
    headers['cookie'] = 1;
    request.continue({ headers });
});

page.on('request', request => {
    console.log(request.headers())
});

page.on('response', response => {
    //console.log(response.headers()['set-cookie'])
});

await page.goto('https://google.com');

编辑:我发现通过处理Network.requestWillBeSentExtraInfo事件可以看到请求cookie标头。

但是,我似乎无法在该事件中编辑请求。

1 个答案:

答案 0 :(得分:-1)

您不能更改每个网络请求的cookie。您可以使用 page.setCookie 并为不同的URL或域提供cookie。下面是供参考的代码:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    var cookies = [
        {
            "name": "sample-cookie1",
            "value": "1",
            "domain": "stackoverflow.com"
        },
        {
            "name": "sample-cookie2",
            "value": "2",
            "domain": "pptr.dev"
        }
    ];

    await page.setCookie(...cookies);

    await page.goto("https://pptr.dev");

    console.log(await page.cookies()); //this will have the **sample-cookie2** cookie

    await page.goto("https://stackoverflow.com");

    console.log(await page.cookies()); //this will have the **sample-cookie1** cookie

})();