将curl转换为节点请求

时间:2016-05-05 15:55:49

标签: node.js express httprequest

我的卷发看起来像这样:

curl -X "POST" "https://theEndpoint.com" \
-H "Authorization: Basic theEncodedUserName/Password" \
-H "Content-Type: application/json" \
-d "{\"GETRSDATA_Input\":{\"@xmlns\":\"http://theEndpoint.com\",\"RESTHeader\":{\"@xmlns\":\"http://theEndpoint.com/header\"},\"InputParameters\":{\"P_CHANGESINCE_DATE\":\"0460070398\"}}}"

我在我的快递应用中使用request模块,如下所示:

var options = {
  method: 'POST',
  url: 'https://theEndpoint.com',
  headers: {
      'Authorization': 'Basic theEncodedUserName/Password',
      'Content-Type': 'application/json',
  },
  multipart: [{
      'content-type': 'application/json',
      body: JSON.stringify({"GETRSDATA_Input":{"@xmlns":"http://theEndpoint.com","RESTHeader":{"@xmlns":"http://theEndpoint.com/header"},"InputParameters":{"P_CHANGESINCE_DATE":"0460070398"}}})
}],

我有一个回调函数来处理响应,我运行它:

request(options, callback);

看起来不错吗?我不相信我正确地设置了请求。

1 个答案:

答案 0 :(得分:2)

您非常接近正确但不完全,有一些关于您的请求选项需要更改的内容。

如果您要在请求中传递JSON,则无需设置Content-Type标头。 request提供的标记jsonboolean值,如果true,则Content-Type将设置为application/json且正文将正确stringified,响应也将被正确解析为JSON。

此外,您的请求正文不应在multipart属性中传递,因为您没有发出多部分请求。您应该使用body属性。

我还看到您的请求正文已根据您在问题中提供的内容进行了字符串化。您不需要预先对其进行字符串化,如上所述request将为您提供。

进行基本身份验证时,您可以在请求中使用auth属性。有关auth媒体资源的详情,请参阅request auth docs

var reqBody = JSON.parse("{\"GETRSDATA_Input\":{\"@xmlns\":\"http://theEndpoint.com\",\"RESTHeader\":{\"@xmlns\":\"http://theEndpoint.com/header\"},\"InputParameters\":{\"P_CHANGESINCE_DATE\":\"0460070398\"}}}");

var options = {
  method: 'POST',
  url: 'https://theEndpoint.com',
  auth: {
    user: YourUsername,
    password: YourPassword,
    sendImmediately: true
  },
  body: reqBody,
  json: true
};

request(options, function(err, res, body) {
    // If an error occurred return the error.
    if (err) return err;

    // No error occurred return the full reponse
    return res;
});