Node.JS http get请求返回未定义的

Node.JS http get请求返回未定义的,node.js,httprequest,http-proxy,Node.js,Httprequest,Http Proxy,这本来应该很简单,但是我没有得到数据,而是没有定义 我在代理服务器后面,我不擅长从代理服务器后面发出请求。我发现只有一个教程解释了在不使用外部模块的情况下使用代理服务器时的http请求,但没有正确解释 const http = require('http'); let options = { host: '10.7.0.1', port:8080, path:'www.google.co.uk' } http.get(options,(res) => {

这本来应该很简单,但是我没有得到数据,而是没有定义

我在代理服务器后面,我不擅长从代理服务器后面发出请求。我发现只有一个教程解释了在不使用外部模块的情况下使用代理服务器时的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文档,并尽我所能编写了options对象,如果我错了,请纠正我


一般来说,在代理服务器之后如何发出请求。

重要

如果您想使用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();
}
额外信息(不需要)

下面是我找到的关于如何创建代理和在代理后发出请求的完整代码。它基本上是创建一个服务器并通过它发出请求

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()
创建一个服务器,然后使用
proxy.listen()
开始侦听。完成后,它使用http的
connect
方法进行连接,并在套接字上写入一个简单的get请求,并将其作为指定路径发送到google。

请求包允许以非常优雅的方式发出
http
请求,并且对于指定代理,只需在请求对象的选项中设置
proxy
键的值作为参数

const request = require('request');

request({url: 'http://example.com', proxy: 'https://host:port'}, (error, response, body) => {
  //Do whatever you want
});

谢谢,但我在google上得到了很多教程,其中解释了使用外部模块发出请求,但我想使用Node的标准模块也这样做。要使用http模块在代理后发出请求,您需要使用该命令设置代理,这就是您要找的吗@Daksh@Daksh请看我的更新,我想我已经找到了解决方案。对不起,我很难理解你的问题。您需要使用connect方法,并指定路径。下面是一个例子。:)我想你搞错了,我不想创建代理服务器。让我详细说明一下=>我在一所大学里,它使用代理服务器(像大多数大学一样)。我发出了一个简单的http get请求,但我没有定义数据,我不确定这是否是因为代理而发生的,另外,我希望在这种情况下有一种生成http请求的通用方法。然后只看上面的代码,如果您有任何问题,请告诉我您在
10.7.0.1
上有什么问题,这几乎是不言自明的@Daksh请查看更新并让我知道它是否有效:)@Daksh