request does all of this, including SSL tunneling. req.pipe(request(req.url, {proxy:'https://site.com'})).pipe(resp)
-Mikeal On Jul 30, 2012, at July 30, 20122:18 PM, axs <alexst...@gmail.com> wrote: > I'm making an http proxy that tunnels data at the transport layer. Here is > the complete code: > > var http = require('http'); > var net = require('net'); > var url = require('url'); > > var proxy = http.createServer(); > > // proxy an HTTP request > proxy.on('request', function(req, res){ > var uri = url.parse(req.url); > > var httpMessage = req.method + ' ' + uri.path + ' HTTP/'+ > req.httpVersion + '\r\n'; > for(var header in req.headers){ > httpMessage += header + ': ' + req.headers[header] + '\r\n'; > } > httpMessage += '\r\n'; > req.on('data', function(data){ > httpMessage += data; > }); > req.on('end', function(data){ > httpMessage += data; > var client = net.connect(uri.port || 80, uri.hostname, > function(){ > client.write(httpMessage); > client.pipe(req.connection); > req.connection.pipe(client); > }); > }); > }); > > // proxy an HTTPS request > proxy.on('connect', function(req, socket, head) { > var uri = req.url.split(':') > var tunnel = net.connect({ > port: uri[1], > host: uri[0] > }, function() { > socket.write('HTTP/1.1 200 Connection Established\r\n\r\n'); > tunnel.write(head); > tunnel.pipe(socket); > socket.pipe(tunnel); > }); > }); > > proxy.listen(8080); > > My question has to do with http proxy section: I haven't run into this > problem yet, but I can see that for potentially large HTTP bodies (such as > file transfers), httpMessage may dramatically increase in size. What is the > best way to pipe this data over the client tcp socket as it comes in, instead > of caching the whole thing and sending all at once? Would be even better if I > could just pipe all the parts of the HTTP message (request line, headers, > body, ...) as they come into the server. > > Thank for any help in advance. > > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en