https代理原理之代码

来源:互联网 发布:人工智能是谁提出来的 编辑:程序博客网 时间:2024/05/13 22:58

Event: 'connect'#

function (response, socket, head) { }

Emitted each time a server responds to a request with a CONNECT method. If this event isn't being listened for, clients receiving aCONNECT method will have their connections closed.

A client server pair that show you how to listen for the 'connect' event.

const http = require('http');const net = require('net');const url = require('url');// Create an HTTP tunneling proxyvar 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  var srvUrl = url.parse(`http://${req.url}`);  var 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 runningproxy.listen(1337, '127.0.0.1', () => {  // 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('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();    });  });});
0 0