Usando Puppeteer , puedo interceptar HTTPResponses y sus HTTPRequests:
page.on("response", async response => {
let request = response.request(); // Getting the response request
let responseHeaders = response.headers(); // Check response headers
response.buffer().then(buffer => {
// Play with response content
});
})
Dependiendo del contenido de la respuesta, necesito enviar la solicitud nuevamente como una nueva y obtener su búfer de respuesta. Instanciar una solicitud idéntica y nueva es una opción válida.
Sé que podría usar node-fetch como último recurso, pero Puppeteer parece tener todo incorporado para hacerlo sin agregar paquetes.
¿Sabes cómo lograr esto?
Puede usar page.evaluatepara enviar una solicitud de publicación usando la API de búsqueda
await page.evaluate(() => {
return fetch('url', {method: 'POST', body: 'test' }).then(res => res.json())
})
Entonces puede hacer una solicitud después de requestfinishedque se dispare el evento.
page.setRequestInterception(true)
page.on('requestfinished', async (request: Request) => {
let response = request.response() // Getting the response request
let responseHeaders = response.headers() // Check response headers
let responseBuffer = await response.buffer() // Get the buffer required
let responseJSON = await response.json() // Get parsed JSON body
await page.evaluate(([headers, buffer, json]) => { // Replay request with buffer received
let someData1 = buffer.toString() // Change buffer to string type
let someData2 = headers['Content-Type'] // or maybe use some headers data
let someData3 = json.properties.value // or use response data object properties
// This fetch API below will do the rest
return fetch('url', { method: 'POST', body: 'test' }).then(res => res.json())
}, [responseHeaders, responseBuffer, responseJSON])
})