最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何使用一个XMLHttpRequest实例格式化request.GET中

运维笔记admin12浏览0评论

如何使用一个XMLHttpRequest实例格式化request.GET中

如何使用一个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);
});

这是基本的(不包括例如电子邮件编码),但理论上应该工作。

发布评论

评论列表(0)

  1. 暂无评论