【问题标题】:Correspondence between curl command and node's requestcurl命令与节点请求的对应关系
【发布时间】:2015-07-08 12:40:07
【问题描述】:

如何使用节点的请求包执行正确返回预期值的 cURL shell 命令curl --data "{\"obj\" : \"1234556\"}" --digest "https://USERNAME:PASSWORD@www.someurl.com/rest-api/v0/objectpost"? 我尝试了这些帖子选项,但没有成功:

var request = require('request');
var body = {"obj" : "1234556"};
var post_options = {
    url: url,
    method: 'POST',
    auth: {
        'user': 'USERNAME',
        'pass': 'PASSWORD',
        'sendImmediately': false
    },
    headers: {
        'Content-Type': 'text/json',
        'Content-Length': JSON.stringify(body).length,
        'Accept': "text/json",
        'Cache-Control': "no-cache",
        'Pragma': "no-cache"
    },
    timeout: 4500000,
    body: JSON.stringify(body)
}
request(post_options, callback);

这样身体就不会被解析(得到类似missing required parameter: "obj"的东西),我不明白这是编码问题还是只是将它传递到错误的地方(即不应该是身体)。有什么建议吗?

【问题讨论】:

  • 您的 cURL 用法似乎不正确?您正在发送一个类似 JSON 的字符串,但默认情况下 cURL 将发送 Content-Type: application/x-www-form-urlencoded,它与有效负载不匹配。
  • 编辑了不够清楚的答案:基本上cURL命令工作正常,是我收到的一个例子,但节点请求没有
  • 您尝试过application/json 吗?否则,您可以尝试使用 urlencoded 表单提交,例如:var post_options = { url: url, method: 'POST', auth: /* ... */, timeout: 4500000, form: body };
  • 谢谢@mscdex,这很可能是解决方案:var post_options = { /* ... */, timeout: 4500000, form: body };,到目前为止它工作正常。您能否发布链接或更好地解释此建议?

标签: node.js curl http-post node-request


【解决方案1】:

默认情况下,cURL 将发送 Content-Type: application/x-www-form-urlencoded,除非您在字段中使用 -F(将其更改为 Content-Type: multipart/form-data)或显式覆盖标头(例如 -H 'Content-Type: application/json')。但是,您的 cURL 示例发送的数据似乎是 JSON。因此服务器会感到困惑,无法正确找到它所期望的数据。

所以解决方案是以下两种选择之一:

  1. 在您的代码中尝试将application/json 用作Content-Type,而不是text/json

  2. 通过使用form 属性,实际上使用urlencoded 格式化数据而不是JSON。 request 将采用 form 对象并为您完成所有转换和标题设置等。例如:

    var post_options = {
      url: url,
      method: 'POST',
      auth: {
        user: 'USERNAME',
        pass: 'PASSWORD',
        sendImmediately: false
      },
      timeout: 4500000,
      form: body
    };
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多