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 a CONNECT
method will have their connections closed.
A client server pair that show you how to listen for the 'connect'
event.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | const http = require( 'http' ); const net = require( 'net' ); const url = require( 'url' ); // Create an HTTP tunneling proxy var 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 running proxy.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(); }); }); }); |
Please login to continue.