Node.JS http get请求返回未定义的
这本来应该很简单,但是我没有得到数据,而是没有定义 我在代理服务器后面,我不擅长从代理服务器后面发出请求。我发现只有一个教程解释了在不使用外部模块的情况下使用代理服务器时的http请求,但没有正确解释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) => {
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