Vallabha
Vallabha

Reputation: 1621

calling external rest api from node without encoding querystring params

I am trying to call an external rest API from node server by using request node module.

let request = require('request');

var options = { 
  method: 'POST',
  url: 'https://somerestURI:3000',
  qs: { msg: 'some|data|for|other|server' } 
};

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

If I try to run the above code, query string value is being encoded to

some%7cdata%7cfor%7cother%7cserver

as a result I am not receiving correct response.

But if I fire the same request in POSTMAN. I am receiving the expected output(I think postman is not encoding query string).

So what I want is don't encode the query string value.

Any help would be greatly appreciated.

Upvotes: 0

Views: 1358

Answers (2)

Saurabh Lende
Saurabh Lende

Reputation: 1013

You can use node-rest-client package. It allows connecting to any REST API and get results as javascript Object.

var HttpClient = require('node-rest-client').Client;
var httpClient = new HttpClient();

// GET Call
httpClient.get("http://remote.site/rest/xml/method", function (data, response) {
       // parsed response body as js object 
       console.log(data);
       // raw response 
       console.log(response);
});)

or for POST Call

var args = {
     data: { test: "hello" },
     headers: { "Content-Type": "application/json" }
};
//POST Call
httpClient.post("http://remote.site/rest/xml/method", args, function (data, response) {
      // parsed response body as js object 
      console.log(data);
      // raw response 
      console.log(response);
});

Upvotes: 0

Mukesh Sharma
Mukesh Sharma

Reputation: 9022

As answered here, you can disable encoding in qsStringifyOptions

var options = { 
   method: 'POST',
   url: 'https://somerestURI:3000',
   qs: { msg: 'some|data|for|other|server' },
   qsStringifyOptions: {
      encoding: false
   } 
};

Upvotes: 2

Related Questions