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

Reply via email to