我的卷发看起来像这样:
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);
看起来不错吗?我不相信我正确地设置了请求。
答案 0 :(得分:2)
您非常接近正确但不完全,有一些关于您的请求选项需要更改的内容。
如果您要在请求中传递JSON,则无需设置Content-Type
标头。 request
提供的标记json
为boolean
值,如果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;
});