NodeJs http 请求发送 api 输入 xml

NodeJs http request send api key in xml

这是示例代码的原始 PHP 版本 =>

$curl = curl_init();
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

///////////////////////////////////////////////////////////////////
/// login
$request='<?xml version="1.0" encoding="UTF-8" ?>
            <Params>
                <ApiKey>abc123</ApiKey>
            </Params>';
            
curl_setopt($curl, CURLOPT_URL, "https://api.unas.eu/shop/login");
curl_setopt($curl, CURLOPT_POSTFIELDS,$request);
$response = curl_exec($curl);
$xml=simplexml_load_string($response);
$token=(string)$xml->Token;

我是根据nodejs文档写的。我也google解决方案但没有找到答案。为什么脚本无法连接到 unas 服务器?

const express = require("express");
const https = require("https");

const app = express();

const postData = '<?xml version="1.0" encoding="UTF-8" ?>'+
        '<Params>' +
        '<ApiKey>abc123</ApiKey>' +
        '</Params>';

const options = {
    protocol:'https:',
    host: "api.unas.eu/shop",
    path: "/login",
    method: "POST",
    headers:{
        'Content-Type': 'application/xml',
        'Content-Length': Buffer.byteLength(postData)
    }
};

const req = https.request(options, (res) => {
    console.log('statusCode:', res.statusCode);
    console.log('headers:', res.headers);
  
    res.on('data', (d) => {
      process.stdout.write(d);
    });
  });
  
  req.on('error', (e) => {
    console.error(e);
  });
  req.end();

回复:

Error: getaddrinfo ENOTFOUND api.unas.eu/shop
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) {
  errno: -3008,
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'api.unas.eu/shop'

你能帮我弄清楚为什么它不起作用吗? 提前致谢。

主机名不应包含路径:

修复如下:

const options = {
    protocol:'https:',
    host: "api.unas.eu",
    path: "/shop/login",
    method: "POST",
    headers:{
        'Content-Type': 'application/xml',
        'Content-Length': Buffer.byteLength(postData)
    }
};

另一个问题:您没有正确传递 post 数据:

const req =...

req.write(postData);//send post data to the request

req.on('error', (e) => {
    console.error(e);
});
req.end();