如何使用一个XMLHttpRequest实例格式化request.GET中
目标
我想用故宫包request
从一个API端点获取数据。我下面的示例使用XMLHttpRequest()
来获取数据。
题
如何将XMLHttpRequest()
转换为request.get
示例代码
我下面的OnSIP example提供以下功能:
卷曲例如:
curl -X POST \
--data \
'Action=SessionCreate&Username=john.doe%40example.onsip&Password=mysuperpassword' \
的XMLHttpRequest()的例子:
var data = new FormData();
data.append('Action', 'SessionCreate');
data.append('Username', '[email protected]');
data.append('Password', 'mysuperpassword');
var xhr = new XMLHttpRequest();
xhr.open('POST', '', true);
xhr.onload = function () {
console.log(this.responseText);
}
xhr.send(data);
我试了一下
卷曲
当我把我的凭据到cURL
命令,我必须成功,该响应指示<IsValid>true</IsValid>
。
的node.js
我把cURL
例子,用这个cURL to Node.js tool上手。
// Config Settings
const onsipAction = "SessionCreate";
const onsipEmail = encodeURIComponent(onsipConfig.email);
const onsipPassword = onsipConfig.password;
const dataString = "Action=" + onsipAction +
"&Username=" + onsipEmail +
"&Password=" + onsipPassword;
console.log("dataString :", dataString);
const onsipSessionCreateOptions = {
url: "",
method: "POST",
body: dataString
};
exports.getOnsipSessionId = function (request){
return (new Promise((resolve, reject) => {
request.get(onsipSessionCreateOptions, function (err, _resp, body) {
if (err) reject(err);
else {
console.log("body :", body);
resolve(body);
}
});
}).catch(err => console.log("err:", err)));
};
日志
我看到这个错误在body
,但不知道这意味着什么。 Accessor parameter is required, but none was specified.
datastring: Action=SessionCreate&Username=fakename%40jahnelgroup.onsip&Password=fakepass
这就是body
:
<?xml version="1.0" encoding="UTF-8"?>
<Response
xmlns="">
<Context>
<Action>
<IsCompleted>false</IsCompleted>
</Action>
<Request>
<IsValid>false</IsValid>
<DateTime>2019-02-06T15:18:10+00:00</DateTime>
<Duration>1</Duration>
<Errors>
<Error>
<Parameter>Action</Parameter>
<Code>Accessor.Required</Code>
<Message>Accessor parameter is required, but none was specified.</Message>
</Error>
</Errors>
</Request>
<Session>
<IsEstablished>false</IsEstablished>
</Session>
</Context>
</Response>
回答如下:
您的要求似乎是一个POST
,而不是GET
。
试试下面的代码片段使用节点重新创建XMLHttpRequest的:
var request = require("request");
var options = { method: 'POST',
url: 'https://api.onsip/api',
headers:
{ 'content-type': 'multipart/form-data;' },
formData:
{ Action: 'SessionCreate',
Username: '[email protected]',
Password: 'mysuperpassword' } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
这是基本的(不包括例如电子邮件编码),但理论上应该工作。