Node.JS http get请求返回undefined

这应该是非常简单的,但没有获取数据,我得到了未定义。

我在代理服务器后面,而且我不擅长从代理服务器发出请求。 我发现只有一个教程,它解释了当使用代理服务器而不使用外部模块时的http请求,并且没有正确解释。

const http = require('http'); let options = { host: '10.7.0.1', port:8080, path:'www.google.co.uk' } http.get(options,(res) => { let str = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { str += chunk; }) res.on('end', (str) => { console.log(str); }) }) 

10.7.0.1是代理服务器的地址,8080是端口。

这段代码的输出是未定义的。

我甚至不知道这个方法是否正确,我无法弄清楚。我读了node http docs,并且尽我所能写了选项对象,如果我错了,就纠正我。

一般来说,如何在使用代理服务器时发出请求(不使用任何外部模块)。

重要

如果要使用http连接到代理服务器,请参阅此部分,您需要使用connect方法

 const options = { port: 8080, hostname: '10.7.0.1', method: 'CONNECT', path: 'www.google.com:80' }; const req = http.request(options); req.end(); req.on('connect', (res, socket, head) => { console.log('got connected!'); socket.write('GET / HTTP/1.1\r\n' + 'Host: www.google.com:80\r\n' + 'Connection: close\r\n' + '\r\n'); socket.on('data', (chunk) => { console.log(chunk.toString()); }); socket.on('end', () => { proxy.close(); } 

额外信息 (不需要)

这里有一个完整的代码,我在这里find关于如何创build代理和请求后面的请求。 它基本上是创build一个服务器,并提出请求。

 const http = require('http'); const net = require('net'); const url = require('url'); // Create an HTTP tunneling proxy const proxy = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('okay'); }); proxy.on('connect', (req, cltSocket, head) => { // connect to an origin server const srvUrl = url.parse(`http://${req.url}`); const srvSocket = net.connect(srvUrl.port, srvUrl.hostname, () => { cltSocket.write('HTTP/1.1 200 Connection Established\r\n' + 'Proxy-agent: Node.js-Proxy\r\n' + '\r\n'); srvSocket.write(head); srvSocket.pipe(cltSocket); cltSocket.pipe(srvSocket); }); }); // now that proxy is running proxy.listen(1337, '127.0.0.1', () => { // make a request to a tunneling proxy const options = { port: 1337, hostname: '127.0.0.1', method: 'CONNECT', path: 'www.google.com:80' }; const req = http.request(options); req.end(); req.on('connect', (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', (chunk) => { console.log(chunk.toString()); }); socket.on('end', () => { proxy.close(); }); }); }); 

它是通过http.createServer()创build一个服务器,然后在proxy.listen()完成之后开始监听,它使用http的connect方法connect ,并在套接字上写入一个简单的获取请求,并将它发送到谷歌指定的path。