naoru
naoru

Reputation: 2227

Making a POST request using puppeteer with JSON payload

I'm trying to make a POST request using puppeteer and send a JSON object in the request, however, I'm getting a timeout... if I'm trying to send a normal encoded form data that at least a get a reply from the server of invalid request... here is the relevant part of the code

await page.setRequestInterception(true);
    const request = {"mac": macAddress, "cmd": "block"};
    page.on('request', interceptedRequest => {

        var data = {
            'method': 'POST',
            'postData': request
        };

        interceptedRequest.continue(data);
    });
    const response = await page.goto(configuration.commandUrl);     
    let responseBody = await response.text();

I'm using the same code to make a GET request (without payload) and its working

Upvotes: 7

Views: 12042

Answers (2)

Edgar Uribe
Edgar Uribe

Reputation: 31

If you are sending json, you need to add "content-type": "application/json". If you don't send it you can receive an empty response.

var data = {
    method : 'POST',
    postData: '{"test":"test_data"}',
    headers: { ...interceptedRequest.headers(), "content-type": "application/json"}
};
interceptedRequest.continue(data);

Upvotes: 2

Thomas Dondorf
Thomas Dondorf

Reputation: 25280

postData needs to be encoded as form data (in the format key1=value1&key2=value2).

You can create the string on your own or use the build-in module querystring:

const querystring = require('querystring');
// ...
        var data = {
            'method': 'POST',
            'postData': querystring.stringify(request)
        };

In case you need to submit JSON data:

            'postData': JSON.stringify(request)

Upvotes: 5

Related Questions