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 <[email protected]> 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 [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en