Почему этот http-запрос node.js зависает бесконечно? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь получить заголовок ответа HTTP со следующим кодом:

var http = require('http');

const options = {
    hostname: 'google.com',
    port: 443,
    path: '/',
    method: 'GET'
  };

  const req = http.request(options, (res) => {
    console.log(`STATUS: ${res.statusCode}`);
    console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
      console.log('No more data in response.');
    });
  });

  req.on('error', (e) => {
    console.error(`problem with request: ${e.message}`);
  });

Однако этот код просто бесконечно висит в узле без вывода или выхода. Почему это? Я адаптировал это из официальной документации здесь: https://nodejs.org/api/http.html#http_http_request_options_callback

1 Ответ

1 голос
/ 15 октября 2019

Во-первых, вы пропустили звонок на req.end() в конце, хотя цитируемая вами документация ясно гласит

С http.request () один всегда должен вызывать req.end () , чтобы обозначить конец запроса - даже если данные не записываются в тело запроса.

Тогда порт 443 предназначен дляHTTPS, а не для простого HTTP. Это означает, что вы должны использовать интерфейс https вместо http:

var https = require('https');
...
const req = https.request(options, (res) => {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...