"Client network socket disconnected before secure TLS connection was established", 节点 10

"Client network socket disconnected before secure TLS connection was established", node 10

当我向 google api 发送请求时(使用 axios 或仅使用 https),例如https://www.googleapis.com/blogger/v3/blogs/2399953?key=...

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

但是如果我向 https://api.github.com, it works just fine. I have googled the error, but I can't find much useful information. Here https://github.com/nodejs/node/issues/21088 发送请求说如果服务器使用 TLS 1.0,它可能会发生但显然不是我的情况。

我也试过googleapis,但还是遇到同样的错误。

知道如何修复错误吗?

----更新----

我的问题已在 5 个月前关闭。我对着googleapi开了an issue,也关了。我已经放弃了,但令我惊讶的是它一直在吸引流量。所以我更新了我的问题,希望它能被重新打开。

首先,googleapi已经搬到这里https://github.com/googleapis/google-api-nodejs-client

其次,仅使用 vpn 到 运行 the first example 那里(使用 vpn 因为 google 服务因任何原因被阻止),我将连接 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 代理发送请求。所以我的问题与这个有点相关,

但是那里的解决方案对我不起作用。此 SO mentioned using 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 and got read ECONNRESET error; I tried 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);
});

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

以防其他人遇到同样的问题,一个可能的解决方案(如果您使用的是 windows OS),是遵循以下过程:

  • 按下 Windows 键
  • 搜索 Internet 选项
  • 点击"Internet Options"
  • 单击 "Connection"
  • 转到 LAN 设置
  • 取消选中 "Use Proxy Server for LAN ...."

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

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

提问后re-opened我提出another issue反对googleapi终于得到答案!

所以googleapi已经支持使用代理,check here