为什么同样的在浏览球和 postman 中可以请求到,而在本地 nodejs 代码中请求不到?

2019-11-09 14:35:57 +08:00
 yuang

我有这样一个请求: https://api.pinterest.com/v1/me/pins/?access_token=xyz,access_token 是有效的,直接粘贴在浏览器地址栏或 postman 中可以访问到,但是使用 如下代码

// test.js
var http = require("https");

var options = {
  "method": "GET",
  "hostname": "api.pinterest.com",
  "port": null,
  "path": "/v1/me/pins?access_token=xyz",
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();

使用 node test.js 运行时报这样的错:

  errno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  address: '173.252.102.241',
  port: 443

请教各位 v 友指点迷津,感谢。

7546 次点击
所在节点    Node.js
7 条回复
nannanziyu
2019-11-09 15:12:38 +08:00
因为你浏览器开代理了
zyl423
2019-11-09 15:13:04 +08:00
抓个包看看请求有什么不同
opengps
2019-11-09 15:15:24 +08:00
useragent 是防爬虫最简单的做法,你没修改就等同于告诉对方你是爬虫
chuxiaonan
2019-11-09 15:16:24 +08:00
有没有可能是 HTTPS 认证的问题 原因可能出在 nodejs 版本不支持 HTTPS 认证 gcc 版本过低 或者其他什么方面
之前在公司服务器上遇到过 重新打个新 docker 就 OK 了
photon006
2019-11-09 15:47:50 +08:00
不要相信自己的封装能力,用现成的 request、superagent 库
yuang
2019-11-09 18:03:53 +08:00
@photon006 感谢,使用 request 库并设置代理已解决问题。
yuang
2019-11-09 18:06:19 +08:00
@nannanziyu 确实是代理问题
@zyl423 不懂如何抓包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/617895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX