Replay and modify caught requests by intercepting network activity within puppeteer scripts.
This package is prepared for:
- QA Engineers
- Reverse Engineers
- Scrapers
- Penetration Testers
npm install puppeteer-extra-plugin-replayer
There are two scenarios to catch ongoing requests:
- initial requests when the site opens
- requests are triggered by user actions such as mouse click or search
In the first scenario, the page initiating must be done in the trigger function.
(async () => {
const request = await page.catchRequest({
pattern: /hashflags.json/
}, () => page.goto("https://twitter.com"));
const response = await request.replay();
})();
In the second scenario, the interaction function that triggers the wanted request must be called in the trigger function of the catchReques
method.
(async () => {
await page.goto("https://twitter.com")
//...
const request = await page.catchRequest({
pattern: /onboarding\/task\.json\?flow_name=login/
}, async () => {
await page.waitForSelector("a[href='/login']")
await page.click("a[href='/login']")
});
await request.replay();
})();
It's possible to modify requests. See more.
const response = await request.replay({
url: "https://twitter.com/logout", // defining a new URL is possible
method: "POST", // changing the request method is possible as well
body: JSON.stringify({test: true}),
headers: {test: true},
});
// or define callback functions to read default values
const response = await request.replay({
url: url => url.replace(/login/, "/logout"),
method: "POST", // changing the request method is possible as well
body: body => body + ";test=true",
headers: headers => {...headers, test: true}
});
You can see original and replayed requests on the network tab in CDP.
The plugin provides a function as .catchRequest(PatternObject, triggerFunction)
, which can be used to catch ongoing requests. The function returns an extended version of HTTPRequest
object, which includes .replay()
method.
The .replay()
method takes an optional argument as an extended version of RequestInit
object that includes functionated version of strign parameters such url
, method
and headers
, and body
.