客户端网络套接字在建立安全的TLS连接之前断开连接,node 10。

95
当我发送请求到谷歌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 issue,它也被关闭了。我已经放弃了,但令我惊讶的是它仍在持续流量。因此,我更新了我的问题,并希望它能重新打开。
首先,谷歌API已经移至https://github.com/googleapis/google-api-nodejs-client
其次,仅仅使用VPN来运行第一个示例(因为Google服务由于某种原因被封锁),我会遇到连接超时的问题,而在浏览器中可以得到结果。
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上的一个答案如何在node.js http.Client中使用http代理?提到了使用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工作!

我还尝试了tunnel,但出现了read ECONNRESET错误;我尝试了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);
});

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


1
代理服务器或防火墙是否阻止了请求?在浏览器中打开 https://www.googleapis.com 时是否出现类似的错误? - robertklep
1
好的。我正在使用 VPN,但如果在 Chrome 中打开该链接,我可以得到正确的结果。 - Qiulang
代码?日志?任何能帮助解决问题的信息? - user207421
1
https://www.googleapis.com it gives not foundI stuck on a problem with firebase storage: `message: 'request to https://storage.googleapis.com/upload/storage/v1/b/res/o?uploadType=multipart&name=61928166801.png failed, reason: Client network socket disconnected before secure TLS connection was established',
type: 'system', errno: 'ECONNRESET', code: 'ECONNRESET' }`
- AH Rasel
@BaltoStar 我认为这是因为,正如我在更新中所说的那样,Google API 已经迁移到了 GitHub。 - Qiulang
显示剩余5条评论
6个回答

6

5

如果有其他人遇到同样的问题,一个可能的解决方案(如果您使用的是Windows操作系统)是按照以下步骤进行:

  • 按下Windows键
  • 搜索“Internet选项”
  • 单击“Internet选项”
  • 点击“连接”
  • 转到LAN设置
  • 取消选中“使用LAN代理服务器....”

这应该可以解决问题,但永久解决方法是确保关闭所有可能会自动为您设置代理的软件。


2

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


我正在使用Windows操作系统。同样的解决方案适用。通过修复这两个变量,我的问题已经解决了。谢谢。 - David Ruan
10
或许你应该提及如何检查这些变量。 - KevinH
@KevinH,在Python中,import os; os.environ["https_proxy"]。如果您尚未设置它,这将引发错误。如果已经设置了,可以在CMD中输入set https_proxy=来删除该值。 - Shayan

2
如果您从终端运行npm/yarn install,请暂时取消代理配置:

unset https_proxy && unset http_proxy


0
在我的情况下,这是由于错误的Node版本引起的。我需要运行nvm use,因为另一个项目使用的是16版本,而我之前的项目使用的是14版本。

0
另一个有用的修复方法可能是你忘记了添加你的IP地址,请尝试从网络访问选项卡中添加你的IP地址。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接