为什么此node.js http请求无限期挂起?
我正在尝试使用以下代码获取HTTP响应标头:
var http = require('http');
const options = {
hostname: 'google',
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}`);
});
但是,此代码无限期地挂在节点上,没有输出或退出。为什么是这样?我从这里的官方文档改编而成:.html#http_http_request_options_callback
回答如下:首先,即使req.end()
明确指出,您仍未打完对documentation you've cited的呼叫
使用http.request()时,必须总是调用req.end()来表示请求结束-即使没有数据写入请求主体。
然后,端口443用于HTTPS,而不用于普通HTTP。这意味着您必须使用https
界面而不是http
:
var https = require('https');
...
const req = https.request(options, (res) => {
为什么此node.js http请求无限期挂起?
我正在尝试使用以下代码获取HTTP响应标头:
var http = require('http');
const options = {
hostname: 'google',
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}`);
});
但是,此代码无限期地挂在节点上,没有输出或退出。为什么是这样?我从这里的官方文档改编而成:.html#http_http_request_options_callback
回答如下:首先,即使req.end()
明确指出,您仍未打完对documentation you've cited的呼叫
使用http.request()时,必须总是调用req.end()来表示请求结束-即使没有数据写入请求主体。
然后,端口443用于HTTPS,而不用于普通HTTP。这意味着您必须使用https
界面而不是http
:
var https = require('https');
...
const req = https.request(options, (res) => {