https post リクエストを行うときに node.js でエラー「ssl3_get_record:wrong version number」が発生する 質問する

https post リクエストを行うときに node.js でエラー「ssl3_get_record:wrong version number」が発生する 質問する

私は次のスクリプトを通じてnode.jsを使用して自分の仕事のAPIにhttpsリクエストを送信しようとしています

const https = require('https');
const options = {
    hostname,
    path: fullPath,
    port: 80,
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': data.length
    }
};
const req = https.request(options, (res) => {
    console.log('statusCode:', res.statusCode);
    res.on('data', chunk => console.log('chunk:', chunk));
});
req.on('error', error => {
    console.log('Failed!');
    console.log(error);
});
req.write(data);
req.end();

そして私は返答として

Failed!
Error: write EPROTO 6772:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332:

    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:87:16) {
  errno: 'EPROTO',
  code: 'EPROTO',
  syscall: 'write'
}

jQueryを使用してブラウザでこのリクエストを実行したところ、うまくいきました

$.post({
    url, data,
    success: res => console.log(res),
});

ヘッダー X-SSL-PROTOCOL を使用しようとしましたが、成功しませんでした。URL とデータは機密情報であるため非表示になっていますが、jQuery の例と node.js では同じです。

ベストアンサー1

    port: 80,
    method: 'POST',
    ...
const req = https.request(options, (res) => {

ポート 80 に対して HTTPS を使用していますが、これは通常、プレーン HTTP です。返される応答は、サーバーがこのポートで HTTPS を提供していないことを示していますが、これは実際には予想される動作です。HTTPS は通常、ポート 443 で実行されます。

jQueryを使用してブラウザでこのリクエストを実行したところ、うまくいきました

urlこの例の内容は不明ですが、そうであれhttps://domain/pathばポート 443 が使用されています。ポート 80 は、明示的に指定された場合にのみ HTTPS で使用されますhttps://domain:80/path

おすすめ記事