【问题标题】:node js, make https post request to google api节点js,向google api发出https post请求
【发布时间】:2016-12-12 22:48:23
【问题描述】:

我正在尝试将 google 帐户登录集成到我正在构建的 node.js 应用程序中,但我在向 google api gate 发送 https 发布请求时遇到了一点问题。

起初我关注这个tutorial,它工作正常,但他们在其中声明,对于谷歌账户ID的后端处理,应该这样做tutorial。那时我开始遇到问题。我不想使用任何额外的库,只想使用原生 node.js 功能来了解它是如何完成的。

为了在后端验证帐户,需要将 o 令牌 ID 安全地发布到给定的 url。

这是正在工作的客户端代码:

var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.googleapis.com/oauth2/v3/tokeninfo');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
    console.log(xhr.responseText);
};
xhr.send('id_token=' + token_id);

现在,当我尝试在服务器端使用 nodejs 时,它不起作用。我尝试使用在 nodejs 文档上找到的代码:

var http = require('http');
var post_data = 'id_token=' + token_id;

var post_options = {
    host: 'googleapis.com',
    port: '80',
    path: '/oauth2/v3/tokeninfo',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
    }
};

var post_req = http.request(post_options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log(chunk);
    });
});

post_req.write(post_data);
post_req.end();

google 的响应是 404 错误The requested URL /oauth2/v3/tokeninfo was not found on this server. That's all we know. 这意味着我做错了什么。所以我的问题是:

  1. 如何改进/修复我的代码,以便它执行正确的 post https 请求?
  2. 我怎么知道这将是一个 https 请求(不是 http)?

感谢您的帮助;)

【问题讨论】:

  • 一方面,您在节点端使用 http 而不是 https。你试过改变吗?
  • 好吧,我没有找到如何改变它,甚至没有找到如何检查它。但我认为这不是这里唯一的问题,我认为一般请求结构也有问题,因为错误表明页面不存在。真的不知道我是否做得对,这就是为什么我包含工作客户端版本示例以了解它的外观。
  • 要改变它,你需要做的基本上就是在任何地方用https替换http,或者离开port或者把它改成443
  • 整个代码中没有 http 引用(模块名称除外),端口 443 正在返回套接字错误。
  • 模块名称必须是 https 才能发出 https 请求 (require('https'))。这是最重要的变化(除了port 变化)。更改变量名和引用只会让事情更清楚。

标签: javascript node.js post https google-api


【解决方案1】:

除了协议不同(http 与 https)之外,您还缺少主机名中的 www 子域(就像您的客户端示例中使用的那样)。将其从 host: 'googleapis.com' 更改为 host: 'www.googleapis.com' 应该可以。

【讨论】:

  • 这确实解决了问题。所以调用https 模块,更改端口80 -> 443 并将www 添加到主机是最终答案。谢谢你,这是一个很好的工作。
猜你喜欢
  • 1970-01-01
  • 2017-08-19
  • 2015-09-25
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
相关资源
最近更新 更多