curl命令与节点请求的对应关系
Correspondence between curl command and node's request
如何使用节点的请求包执行此 cURL shell 命令 curl --data "{\"obj\" : \"1234556\"}" --digest "https://USERNAME:PASSWORD@www.someurl.com/rest-api/v0/objectpost"
以正确 returns 预期值?
我尝试了那些 post 选项但没有成功:
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 将发送 Content-Type: application/x-www-form-urlencoded
,除非您对字段使用 -F
(将其更改为 Content-Type: multipart/form-data
)或显式覆盖 header(例如-H 'Content-Type: application/json'
)。但是,您的 cURL 示例发送的数据似乎是 JSON。所以服务器会感到困惑,无法正确找到它期望的数据。
所以解决方案是两个选项之一:
在您的代码中尝试将 application/json
作为 Content-Type
而不是 text/json
。
实际上使用 form
属性 使用 urlencoded 格式化数据而不是 JSON。 request
将采用 form
object 并为您完成 header 的所有转换和设置等。例如:
var post_options = {
url: url,
method: 'POST',
auth: {
user: 'USERNAME',
pass: 'PASSWORD',
sendImmediately: false
},
timeout: 4500000,
form: body
};
如何使用节点的请求包执行此 cURL shell 命令 curl --data "{\"obj\" : \"1234556\"}" --digest "https://USERNAME:PASSWORD@www.someurl.com/rest-api/v0/objectpost"
以正确 returns 预期值?
我尝试了那些 post 选项但没有成功:
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 将发送 Content-Type: application/x-www-form-urlencoded
,除非您对字段使用 -F
(将其更改为 Content-Type: multipart/form-data
)或显式覆盖 header(例如-H 'Content-Type: application/json'
)。但是,您的 cURL 示例发送的数据似乎是 JSON。所以服务器会感到困惑,无法正确找到它期望的数据。
所以解决方案是两个选项之一:
在您的代码中尝试将
application/json
作为Content-Type
而不是text/json
。实际上使用
form
属性 使用 urlencoded 格式化数据而不是 JSON。request
将采用form
object 并为您完成 header 的所有转换和设置等。例如:var post_options = { url: url, method: 'POST', auth: { user: 'USERNAME', pass: 'PASSWORD', sendImmediately: false }, timeout: 4500000, form: body };