问题描述
$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 文档编写的。我也谷歌了解决方案,但没有找到并回答。为什么脚本无法连接到 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)
}
};
另一个问题:您没有正确传递帖子数据:
const req =...
req.write(postData);//send post data to the request
req.on('error',(e) => {
console.error(e);
});
req.end();