Javascript 如何使用XMLHttpRequest示例格式化request.get 目标
我想使用npm包Javascript 如何使用XMLHttpRequest示例格式化request.get 目标,javascript,node.js,curl,request,xmlhttprequest,Javascript,Node.js,Curl,Request,Xmlhttprequest,我想使用npm包request从API端点获取数据。下面的示例使用XMLHttpRequest()获取数据 问题: 如何将XMLHttpRequest()转换为请求。get 示例代码 以下“我是”提供了以下内容: 卷曲示例: curl -X POST \ --data \ 'Action=SessionCreate&Username=john.doe%40example.onsip.com&Password=mysuperpassword' \ https://api.onsip
request
从API端点获取数据。下面的示例使用XMLHttpRequest()
获取数据
问题:
如何将XMLHttpRequest()
转换为请求。get
示例代码
以下“我是”提供了以下内容:
卷曲示例:
curl -X POST \
--data \
'Action=SessionCreate&Username=john.doe%40example.onsip.com&Password=mysuperpassword' \
https://api.onsip.com/api
var data = new FormData();
data.append('Action', 'SessionCreate');
data.append('Username', 'john.doe@example.onsip.com');
data.append('Password', 'mysuperpassword');
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.onsip.com/api', true);
xhr.onload = function () {
console.log(this.responseText);
}
xhr.send(data);
XMLHttpRequest()示例:
curl -X POST \
--data \
'Action=SessionCreate&Username=john.doe%40example.onsip.com&Password=mysuperpassword' \
https://api.onsip.com/api
var data = new FormData();
data.append('Action', 'SessionCreate');
data.append('Username', 'john.doe@example.onsip.com');
data.append('Password', 'mysuperpassword');
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.onsip.com/api', true);
xhr.onload = function () {
console.log(this.responseText);
}
xhr.send(data);
我试过的
卷曲
当我将凭证放入cURL
命令时,我成功了,响应指示true
node.js
我以cURL
为例,开始使用它
// 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: "https://api.onsip.com/api",
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)));
};
日志
我在正文
中看到了这个错误,但不确定它是什么意思。
访问器参数是必需的,但未指定任何参数。
datastring: Action=SessionCreate&Username=fakename%40jahnelgroup.onsip.com&Password=fakepass
这是正文
:
<?xml version="1.0" encoding="UTF-8"?>
<Response
xmlns="http://www.jnctn.net/ns/rest/2006-01">
<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.com/api',
headers:
{ 'content-type': 'multipart/form-data;' },
formData:
{ Action: 'SessionCreate',
Username: 'john.doe@example.onsip.com',
Password: 'mysuperpassword' } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
它是基本的(例如不包括电子邮件编码),但在理论上应该是可行的。问题
正如莫阿在他的回答中所显示的,我遗漏了两件事:
错误,而request.get
正确request.post
- OnSIP端点已准备就绪,可用于
formData
感谢Mo A、OnSIP开发者和MShirk的支持 添加formData可能是我需要的提示。现在试试这个是的!修复了
request.post
和使用formData
。OnSIP的优秀开发人员很快证实了Mo A所说的。事实证明,这个实现不需要用户名编码。