Ошибка "ssl3_get_record: неправильный номер версии" в node.js при отправке запроса https - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь сделать запрос https для API моей работы, используя node.js через следующий скрипт

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 Ответ

0 голосов
/ 30 марта 2020
    port: 80,
    method: 'POST',
    ...
const req = https.request(options, (res) => {

Вы используете HTTPS против порта 80, который обычно является простым HTTP. Полученный ответ предполагает, что сервер не предоставляет HTTPS для этого порта, что на самом деле является ожидаемым поведением. HTTPS вместо этого обычно делается на порту 443.

Я сделал этот запрос в браузере, используя jQuery, и он работал

Неясно, что в url этот пример, но если он просто был https://domain/path, то использовался порт 443. Порт 80 использовался бы только с HTTPS, если явно указан, то есть https://domain:80/path.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...