code!
[http-client.git] / backend.js
blob890797b83b7788f8f0e8af062a558bf924a483b9
2 var http = require('http');
3 var dns = require('dns');
5 var HEADERS = {
6   'Content-Type': 'application/json',
7   'Access-Control-Allow-Origin': '*'
8 };
10 http.createServer(function(req, res) {
11   var url = require('url').parse(req.url, true);
12   if(req.method === 'GET' && url.pathname === '/uri-info') {
13     console.log('query', url.query);
14     lookup(url.query, function(result) {
15       res.writeHead(200, HEADERS);
16       res.write(JSON.stringify(result));
17       res.end();
18     });
19   } else if(req.method === 'POST' && url.pathname === '/send') {
20     console.log('send request', url.query);
21     var request = http.request(url.query);
22     request.on('response', function(response) {
23       console.log('have response');
24       var body = '', lastLength = 0;
25       response.on('data', function(chunk) {
26         body += chunk;
27         if((body.length - lastLength) > 1024) {
28           console.log((body.length / 1024).toFixed(2) + ' kB');
29           lastLength = body.length;
30         }
31       });
32       response.on('end', function() {
33         console.log('end');
34         res.writeHead(200, HEADERS);
35         res.write(JSON.stringify({
36           status: response.statusCode,
37           body: body,
38           headers: response.headers
39         }));
40         res.end();
41       });
42     });
43     request.end();
44   } else {
45     res.writeHead(404, HEADERS);
46     res.write('Not Found');
47     res.end();
48   }
49 }).listen(8088);
50 console.log('listening on 0.0.0.0:8088');
52 function lookup(query, callback) {
53   if(query.host) {
54     dns.resolve(query.host, function(error, result) {
55       if(error) {
56         query.error = error;
57       } else {
58         query.addresses = result;
59       }
60       callback(query);
61     });
62   } else {
63     callback(query);
64   }