代码之家  ›  专栏  ›  技术社区  ›  Chadd Yasin Özcan

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

  •  0
  • Chadd Yasin Özcan  · 技术社区  · 7 年前

    球门

    request XMLHttpRequest() 获取数据。

    问题

    我该怎么办 转换 这个 request.get

    示例代码

    这个 OnSIP example

    卷曲示例:

    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>

    node.js

    我拿了 卷曲 示例并使用此 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: "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
    

    身体 :

    <?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>
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Chadd Yasin Özcan    7 年前

    问题

    正如莫阿在他的回答中所显示的,我遗漏了两件事:

    • 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的支持!

        2
  •  0
  •   Mo A    7 年前

    您的请求似乎是错误的 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);
    });
    

    它是基本的(例如不包括电子邮件编码),但在理论上应该是可行的。