“在建立安全 TLS 连接之前客户端网络套接字已断开”,节点 10

问题描述 投票:0回答:5

当我向 google api 发送请求时(使用 axios 或仅使用 https),例如

https://www.googleapis.com/blogger/v3/blogs/2399953?key=...

我总是遇到“建立安全 TLS 连接之前客户端网络套接字已断开”错误。

但是如果我将请求发送到https://api.github.com,它就可以正常工作。我已经用谷歌搜索了该错误,但找不到太多有用的信息。这里https://github.com/nodejs/node/issues/21088说如果服务器使用TLS 1.0,它可能会发生,但显然这不是我的情况。

我也尝试了 googleapis 但仍然遇到同样的错误。

知道如何修复错误吗?

----更新----

我的问题已于 5 个月前结束。我针对 googleapi 打开了an issues,它也被关闭了。我已经放弃了它,但令我惊讶的是它不断获得流量。所以我更新了我的问题并希望它能重新开放。

首先,google api 已移至此处https://github.com/googleapis/google-api-nodejs-client

其次,只需使用VPN运行第一个示例(使用VPN,因为谷歌服务因某种原因被阻止),我将获得连接ETIMEDOUT,同时我可以从浏览器获取结果。

const {google} = require('googleapis');
const blogger = google.blogger({
  version: 'v3',
  auth: 'YOUR API KEY'
});

blogger.blogs.get({blogId: '3213900'}, (err, res) => {
  if (err) {
    console.error(err);
    throw err;
  }
  console.log(`The blog url is ${res.data.url}`);
});
//But I can get result in browser https://blogger.googleapis.com/v3/blogs/3213900?key=xxx

我认为问题是可以解决的,因为nodejs不通过我的VPN代理发送请求。所以我的问题与此有点相关,当 URL 在浏览器中工作时,什么可能导致“connect ETIMEDOUT”错误?

但是那里的解决方案对我不起作用。 SO 中的一个答案如何将http代理与node.js http.Client一起使用?提到使用request并且它有效!

var request = require("request");

request(
  {
    url:
      "https://blogger.googleapis.com/v3/blogs/3213900?key=xxx",
    method: "GET",
    proxy: my-vpn-proxy,
  },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body);
    }
  }
);

太糟糕了,请求已被弃用!我也无法让 axios 工作!

我也尝试了隧道并得到了

read ECONNRESET error
;我尝试了 global-tunnel-ng 并收到错误

TypeError: Cannot read property 'proxy' of undefined
    

但是 https-proxy-agent 也可以工作,

var url = require('url');
var https = require('https');
var HttpsProxyAgent = require('https-proxy-agent');
 
// HTTP/HTTPS proxy to connect to
var proxy = 'my-vpn-proxy';

var endpoint = 'https://blogger.googleapis.com/v3/blogs/3213900?key=xxx';
var opts = url.parse(endpoint);
 
var agent = new HttpsProxyAgent(proxy);
opts.agent = agent;
 
https.get(opts, function (res) {
  console.log('"response" event!', res.headers);
  res.pipe(process.stdout);
});

所以我认为这个问题可能是可以解决的。

node.js ssl vpn
5个回答
6
投票

问题重新提出后,我针对google api提出了另一个问题,终于得到了答案!

所以google api已经支持使用代理了,查看这里


5
投票

如果其他人也面临同样的问题,一个可能的解决方案(如果您使用的是 Windows 操作系统)是按照以下过程操作:

  • 按 Windows 键
  • 搜索互联网选项
  • 单击“Internet 选项”
  • 点击“连接”
  • 进入局域网设置
  • 取消选中“对 LAN 使用代理服务器......”

它应该可以工作,但永久的解决方案是确保你打开所有可能自动为你设置代理的软件。


2
投票

如果您从终端运行

npm/yarn install
,请暂时取消代理配置:

unset https_proxy && unset http_proxy
.


1
投票

此错误可能与您的代理有关。如果在 Unix 上,请检查您的 HTTP_PROXY 和 HTTPS_PROXY 环境变量。


0
投票

就我而言,这是由错误的 Node 版本引起的。必须运行

nvm use
,因为这是一个使用版本 16 的不同项目,而我在上一个项目中使用 14

© www.soinside.com 2019 - 2024. All rights reserved.