【问题标题】:What is correct format of Node.js http.request options hostname parameter?Node.js http.request 选项主机名参数的正确格式是什么?
【发布时间】:2017-03-19 16:56:02
【问题描述】:

我正在尝试向 Instagram API 发出请求,但我无法理解为什么选项中的 http.request 主机名参数。

这是我的代码:

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

function requestInstagramData(){
    var options = {
      protocol: "https:",
      hostname: "https://api.instagram.com",
      path: "/v1/tags/fashion?access_token=3681332213.81b69f2.88020902f003411196c3f4423912f547",
      method: "GET"
    };
    var instaRequest = https.request(options);

     instaRequest.on("response", function(res){
      res.on("data", function(data){
        console.log("data has arrived");
      });

      console.log("response");
      console.log(res.statusCode);
      console.log(res.statusMessage);
    });

    instaRequest.end();

}
requestInstagramData();

此代码不起作用,但如果我将选项对象中的主机名更改为

hostname: "api.instagram.com"

它正在工作。

为什么?

【问题讨论】:

  • 因为这是主机名
  • 我之所以这么问,是因为我在网上看到了很多例子,其中包括 http:// 或 https:// 在主机名参数中。这就是我感到困惑的原因。
  • 希望我的回答有帮助。我注意到你有几个反对票。我不认为这是一个坏问题。但是,如果您想改进对 SO 提出问题的方式,请阅读以下内容:stackoverflow.com/help/how-to-ask

标签: javascript node.js http https hostname


【解决方案1】:
  1. http.request 是一个与任何其他函数一样的函数。要正确使用它,您需要知道它可以接受什么输入,为此我们通常检查文档。

  2. http.request (link) 的文档说输入,参数,必须是由协议,主机名,路径等组成的对象。这些都是http url方案的标准组件。你可以查看这篇文章 (link),它非常清楚地解释了这些组件是如何命名的。

记住这两个。它不适用于“http://”,因为这是协议,不应包含在主机名中。

【讨论】:

  • 我之所以这么问,是因为我在网上看到了很多例子,其中包括 http:// 或 https:// 在主机名参数中。我对检查文档非常满意,事实上我在发布问题之前就这样做了。
  • @margarita 哦,我不知道那部分,将其添加到问题中会更清楚。
  • 下次会做!还是谢谢!
  • @margarita 如果您看到不同的示例,可能是因为不同版本的 Node.js。我不确定,只是猜测。
  • 这很好,尽管我建议将评论移至问题下方 - OP 不会在您的回答 :-) 下阅读它。
【解决方案2】:

正如您在尝试“api.instagram.com”时已经发现的那样,hostname 属性仅用于指定主机,并且根据定义,主机名不包含协议。协议进入 protocol 属性,就像您已经完成的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2014-05-09
    • 1970-01-01
    • 2011-04-04
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多