问题
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.example.com/search');
const data = await page.content();
browser.close();
res.send(data);
})();
I do this code for send get
request. I don't understand how I should send post
request?
回答1:
Getting the "order" right can be a bit of a challenge. Documentation doesn't have that many examples... there are some juicy items in the repository in the example folder that you should definitely take a look at.
https://github.com/GoogleChrome/puppeteer/tree/master/examples
Here is the example; place the following into an async block:
// Create browser instance, and give it a first tab
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Allows you to intercept a request; must appear before
// your first page.goto()
await page.setRequestInterception(true);
// Request intercept handler... will be triggered with
// each page.goto() statement
page.on('request', interceptedRequest => {
// Here, is where you change the request method and
// add your post data
var data = {
'method': 'POST',
'postData': 'paramFoo=valueBar¶mThis=valueThat'
};
// Request modified... finish sending!
interceptedRequest.continue(data);
});
// Navigate, trigger the intercept, and resolve the response
const response = await page.goto('https://www.example.com/search');
const responseBody = await response.text();
console.log(responseBody);
// Close the browser - done!
await browser.close();
回答2:
For POST you should do the following:
- Set for the page's request to be intercepted: page.setRequestInterception();
- Get the request object by setting up a handler for the 'request' event: page.on('request', function(){})
- Set the request's method (POST) and postData as overrides using request.continue([overrides])
See Puppeteer's API docs here: https://github.com/GoogleChrome/puppeteer/blob/HEAD/docs/api.md
回答3:
Here the complete example with Puppeteer 2.0.0 :
const puppeteer = require("puppeteer");
const devices = require("puppeteer/DeviceDescriptors");
async function main() {
const browser = await puppeteer.launch({
args: ["--enable-features=NetworkService", "--no-sandbox"],
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
await page.setRequestInterception(true);
page.once("request", interceptedRequest => {
interceptedRequest.continue({
method: "POST",
postData: "foo=FOO&bar=BAR",
headers: {
...interceptedRequest.headers(),
"Content-Type": "application/x-www-form-urlencoded"
}
});
});
const response = await page.goto("https://postman-echo.com/post");
console.log({
url: response.url(),
statusCode: response.status(),
body: await response.text()
});
await browser.close();
}
main();
Note that if you check response.request().method()
it won't be updated (still GET)
来源:https://stackoverflow.com/questions/47060534/how-do-post-request-in-puppeteer