javascript - 如何使用 XMLHttpRequest 示例格式化 request.get
问题描述
目标
我想使用 npm 包request
从 API 端点获取数据。我下面的示例XMLHttpRequest()
用于获取数据。
问题
如何将转换为XMLHttpRequest()
request.get
示例代码
我正在关注的OnSIP 示例提供以下内容:
卷曲示例:
curl -X POST \
--data \
'Action=SessionCreate&Username=john.doe%40example.onsip.com&Password=mysuperpassword' \
https://api.onsip.com/api
XMLHttpRequest() 示例:
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
命令时,我成功了,并且响应指示<IsValid>true</IsValid>
.
节点.js
我举了一个cURL
例子,并使用这个cURL 到 Node.js 工具开始。
// 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)));
};
日志
我在 中看到这个错误body
,但不确定它是什么意思。
Accessor parameter is required, but none was specified.
datastring: Action=SessionCreate&Username=fakename%40jahnelgroup.onsip.com&Password=fakepass
这是body
:
<?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>
解决方案
问题
正如 Mo A 在他的回答中显示的那样,我错过了两件事:
request.get
是错误的,而是request.post
正确的。- OnSIP 端点已准备就绪
formData
适合我的代码
// Config Settings
const onsipAction = "SessionCreate";
const onsipEmail = onsipConfig.email;
const onsipPassword = onsipConfig.password;
const options = { method: "POST",
url: "https://api.onsip.com/api",
headers:
{ "content-type": "multipart/form-data;" },
formData:
{ Action: onsipAction,
Username: onsipEmail,
Password: onsipPassword,
Output: "json"
}
};
exports.getOnsipSessionId = function (request){
return (new Promise((resolve, reject) => {
request.post(options, function (err, response, body) {
if (err) reject(err);
else {
console.log("body :", body);
resolve(body); // Contains SessionId
}
});
}).catch(err => console.log("err:", err)));
};
感谢 Mo A、OnSIP 开发人员和 MShirk 的支持!
推荐阅读
- c - 如何使结构化数组循环输出我想要的
- javascript - 使用 Java 脚本禁用浏览器中的 Fn+ F12 键
- javascript - 添加多张图片预览和删除 React
- python - Numpy:使用 2d 数组沿 3d 数组的轴选择
- ios - Flutter ios 构建失败 - 我需要注册苹果开发者吗?
- python - 你可以在没有模拟的情况下在 ReadTheDocs 构建中使用 QT 吗?
- python - 我如何从 10 个玩家中随机选择 5 个,并且他们每个人都有不同的随机选择的 y 坐标从列表中?
- c# - 如何使用 LINQ Query 对字符串执行日期范围过滤
- sql - 如何从员工表中更新员工电子邮件地址(只需更改所有员工的域名)
- python - Python 错误:写入 json 文件时无法将“列表”对象隐式转换为 str