简体   繁体   中英

Intercept a certain request and get its response (puppeteer)

Once that puppeteer goes to a certain url, I want that it listens to all the requests that are made, then find a specific request and return its response. The response should be a json object.

I managed in listening to all the requests and intercepting the desired one, but I don't know how to get its response. Here's my attempt: I get the error TypeError: Cannot read property 'then' of null .

Any suggestion?

page.on('request',async(request)=>{
    console.log(request.url())

    if (request.url().includes('desiredrequest.json')){
        console.log('Request Intercepted')
        request.response().then(response => {
            return response.text();
        }).then(function(data) {
        console.log(data); // this will be a string
        alert(data)
        });
    }

    request.continue()
})

Since the response may have not arrived yet, the better method would be listening on the response event and get the request object from it.

page.on('response', async(response) => {
    const request = response.request();
    if (request.url().includes('desiredrequest.json')){
        const text = await response.text();
        console.log(text);
    }
})

You might wanna use the "requestfinished" event instead of the "request" one.

page.on('requestfinished', async (request) => {
    const response = await request.response();

    const responseHeaders = response.headers();
    let responseBody;
    if (request.redirectChain().length === 0) {
        // Because body can only be accessed for non-redirect responses.
        if (request.url().includes('desiredrequest.json')){
            responseBody = await response.buffer();
        }
    }
    // You now have a buffer of your response, you can then convert it to string :
    console.log(responseBody.toString());

    request.continue()
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM