Cuadrix / puppeteer-page-proxy

Additional module to use with 'puppeteer' for setting proxies per page basis.
423 stars 99 forks source link

useProxy removes ExtraInfo from CDP content #82

Open jan opened 1 year ago

jan commented 1 year ago

When I use useProxy(request, proxy), my CDP session misses Network.requestWillBeSentExtraInfo and Network.responseReceivedExtraInfo.

Reproduce with:

const puppeteer = require('puppeteer-extra')
const useProxy = require('puppeteer-page-proxy')

async function setupLoggingOfAllNetworkData(page) {
  const cdpSession = await page.target().createCDPSession()
  await cdpSession.send('Network.enable')
  const cdpRequestDataRaw = {}
  const addCDPRequestDataListener = (eventName) => {
    cdpSession.on(eventName, request => {
      cdpRequestDataRaw[request.requestId] = cdpRequestDataRaw[request.requestId] || {}
      Object.assign(cdpRequestDataRaw[request.requestId], { [eventName]: request })
    })
  }
  addCDPRequestDataListener('Network.requestWillBeSent')
  addCDPRequestDataListener('Network.requestWillBeSentExtraInfo')
  addCDPRequestDataListener('Network.responseReceived')
  addCDPRequestDataListener('Network.responseReceivedExtraInfo')
  return cdpRequestDataRaw
}

(async function () {
  const browser = await puppeteer.launch({ args: [], headless: true })
  const proxy = 'http://<redacted, please use your own>'

  const page = await browser.newPage()
  await page.setRequestInterception(true)
  page.on('request', async (request) => {
    // request.continue() // <- this gives me all four CDP responses
    await useProxy(request, proxy) // <- this is missing Network.requestWillBeSentExtraInfo and Network.responseReceivedExtraInfo
  })
  const cdpRequestDataRaw = await setupLoggingOfAllNetworkData(page);
  await page.goto('https://httpbin.org/anything', {
    waitUntil: 'networkidle2'
  })
  console.log('cdpRequestDataRaw', cdpRequestDataRaw)

  await browser.close()
})();