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

我总是点击"Client network socket disconnected before secure TLS connection was established" 错误。

但是如果我发送请求到https://api.github.com,它工作得很好。https://github.com/nodejs/node/issues/21088说如果服务器使用 TLS 1.0,它可能会发生,但显然这不是我的情况。

我也尝试谷歌API但仍然遇到同样的错误。

知道如何修复错误吗?

    • 更新 - -

我的问题已于 5 个月前结束。一个问题针对googleapi,它也被关闭了。

首先,Google API已移至这里https://github.com/googleapis/google-api-nodejs-client

第二,只使用VPN运行第一个示例在那里(使用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代理发送请求。所以我的问题与这个问题有些相关,当URL在浏览器中工作时,什么可能导致"连接eTimedOut"错误?

但是那里的解决方案对我不起作用。这是一个答案如何使用node.js http.client使用HTTP代理?提到使用要求它有效!

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;我试过全局隧道 NG并有错误

TypeError: Cannot read property 'proxy' of undefined

https-proxy-engent也有效

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);
});

因此,我认为这个问题可能是可以解决的。

答案

重新打开问题后,我提出了另一个问题针对Google API,终于得到了答案!

因此Google API支持使用代理,在这里检查

来自: stackoverflow.com