1. ホーム
  2. node.js

[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10

2022-01-28 07:48:19

質問

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を使用している場合、それが起こるかもしれないと言いましたが、どうやら私のケースではないようです。

また グーグルアピス が、やはり同じエラーになります。

エラーを修正する方法を教えてください。

----更新 ----。

私の質問は5ヶ月前に締め切られました。私は 課題 googleapiに対抗して、それも閉鎖されました。あきらめていたのですが、なんとアクセス数が増え続けています。そこで、質問を更新し、再開されることを期待します。

まず、google apiはこちらに移動しました。 https://github.com/googleapis/google-api-nodejs-client

次に、vpn を使って実行するだけで 最初の例 そこで、(何らかの理由でgoogleサービスがブロックされているため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で一つの答え 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-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);
});

だから、この問題は解決できるかもしれないと思っています。

どのように解決するのか?

質問が再開された後、私は 別の問題 Googleのapiに対抗して、ようやく答えが出たのです

google apiはプロキシを使うことをサポートしているんですね。 こちらをご覧ください