我正在研究来自 Node.js http 模块文档https://nodejs.org/api/http.html#http_event_connect_1的代码。原始代码在屏幕上打印 http 响应数据。在我将“数据”事件回调从位置 (A) 移动到 (B) 后,它只打印连接标头HTTP/1.1 200 Connection Established ...
但不打印 http 正文。程序就停在那里。是套接字没有发出“数据”事件还是什么原因?似乎套接字也没有发出“结束”事件。
我通过添加代码 (C) 解决了这个问题,强制套接字以流动模式工作。但我不明白为什么没有代码(C)它就不能工作。
客户端部分代码如下:
// make a request to a tunneling proxy
var options = {
port: 1337,
hostname: '127.0.0.1',
method: 'CONNECT',
path: 'www.google.com:80'
};
var req = http.request(options);
req.end();
req.on('socket', function(res, socket, head) { // Added for learning
socket.on('data', function(chunk) { // (B)
console.log(chunk.toString());
});
// socket.resume(); // (C) FIX
});
req.on('connect', function(res, socket, head) {
console.log('got connected!');
// make a request over an HTTP tunnel
socket.write('GET / HTTP/1.1\r\n' +
'Host: www.google.com:80\r\n' +
'Connection: close\r\n' +
'\r\n');
// socket.on('data', function(chunk) { // (A)
// console.log(chunk.toString());
// });
socket.on('end', function() {
proxy.close();
});
});
完整的原始代码在这里:https ://nodejs.org/api/http.html#http_event_connect_1