Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用XMLHttpRequest示例格式化request.get 目标_Javascript_Node.js_Curl_Request_Xmlhttprequest - Fatal编程技术网

Javascript 如何使用XMLHttpRequest示例格式化request.get 目标

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

我想使用npm包
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所说的。事实证明,这个实现不需要用户名编码。