【问题标题】:Https request not working in node.jsHttps 请求在 node.js 中不起作用
【发布时间】:2018-03-10 16:50:22
【问题描述】:

在我的 node.js 应用程序中,我想进行 https api 调用。我正在尝试使用 https 模块,但它无法正常工作,但随后我尝试使用 request 模块,并且成功了。

不工作

var options = {
    host : 'myserver/platform-api/v1',
    port : 80,
    path : '/projects?access_token=38472',
    method : 'GET',
    headers : {
        'Accept' : 'application/json'
    }
};
var req = https.request(options, function(res) {
    res.on('data', function(chunk) {
        console.log(chunk);
    });
});
req.on('error', function(e) {
    console.log(e);
    console.log('problem with request:', e.message);
});
req.end();

我明白了

problem with request: getaddrinfo ENOTFOUND myserver/platform-api/v1
 myserver/platform-api/v1:80

这行得通

request("https://myserver/platform-api/v1/projects?access_token=38472", function(error, response, body) {
    if (error) return console.log(error);
    //console.log(error);
    //console.log(response);
    console.log(body);
});

我不明白为什么它不适用于第一个。有谁知道为什么?

谢谢

【问题讨论】:

  • 不是将选项作为参数传递,而是传递 options.path?

标签: javascript node.js api http https


【解决方案1】:

EDIT也切换到443端口。


您的host 似乎包含部分路径?试试这个(只保留host 中的主机并将路径移动到path):

var options = {
    host : 'myserver',
    port : 443,
    path : '/platform-api/v1/projects?access_token=38472',
    method : 'GET',
    headers : {
        'Accept' : 'application/json'
    }
};

【讨论】:

  • 为什么你要传递对象中的所有内容,而不是在其他地方定义所有这些属性?
  • 我不确定你在问什么。 port 默认为 443,因此可以省略。是这个意思吗?
  • 谢谢,这是端口,我在主机中有部分路径。
  • 我对这种格式不太熟悉,所以我只是想问一下你为什么将主机、路径、方法等都定义为 HTTP 请求的对象属性中的参数。我的想法是这将在其他地方定义,所以你可以做简单的 GET、PUT、DELETE、PATCH 等。它看起来更像是一个 AJAX 调用。
  • 也应该对自己进行更多关于这个主题的教育,节点。这是一个很笼统的问题。
【解决方案2】:

此外,您正在访问端口 80,这通常不是 HTTPS 端口。

【讨论】:

  • 好的,谢谢,我想通了,它是端口 443,我在主机中有部分路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多