pass JSON to HTTP POST Request
curl, express, json, node-request, node.js
Solution
I think the following should work:
// fire request
request({
url: url,
method: "POST",
json: requestData
}, ...
In this case, the `Content-type: application/json` header is automatically added.
Problem
I'm trying to make a HTTP POST request to the google QPX Express API [1] using nodejs and request [2]. My code looks as follows: ``` // create http request client to consume the QPX API var request = require("request") // JSON to be passed to the QPX Express API var requestData = { "request": { "slice": [ { "origin": "ZRH", "destination": "DUS", "date": "2014-12-02" } ], "passengers": { "adultCount": 1, "infantInLapCount": 0, "infantInSeatCount": 0, "childCount": 0, "seniorCount": 0 }, "solutions": 2, "refundable": false } } // QPX REST API URL (I censored my api key) url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=myApiKey" // fire request request({ url: url, json: true, multipart: { chunked: false, data: [ { 'content-type': 'application/json', body: requestData } ] } }, function (error, response, body) { if (!error && response.statusCode === 200) { console.log(body) } else { console.log("error: " + error) console.log("response.statusCode: " + response.statusCode) console.log("response.statusText: " + response.statusText) } }) ``` What I'm trying to do is passing the JSON using the multipart argument [3]. But instead of the proper JSON response I got an error (400 undefined). When I make a request using the same JSON and API Key using CURL instead, it works fine. So there's nothing wrong with my API key or JSON. What's wrong with my code? EDIT: working CURL example: i) I saved the JSON which I would pass to my request into a file called "request.json": ``` { "request": { "slice": [ { "origin": "ZRH", "destination": "DUS", "date": "2014-12-02" } ], "passengers": { "adultCount": 1, "infantInLapCount": 0, "infantInSeatCount": 0, "childCount": 0, "seniorCount": 0 }, "solutions": 20, "refundable": false } } ``` ii) then, in the terminal I switched to the directory in which the newly created request.json file was located and run (myApiKey stands for my actual API Key obviously): ``` curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=myApiKey ``` [1] https://developers.google.com/qpx-express/ [2] a http request client designed for nodejs: https://www.npmjs.org/package/request [3] here is an example I found https://www.npmjs.org/package/request#multipart-related [4] QPX Express API is returning 400 parse error