Explorar el Código

fix remote apis request error

Dotos hace 8 años
padre
commit
b5e81e1686
Se han modificado 10 ficheros con 174 adiciones y 103 borrados
  1. 6 1
      app.js
  2. 8 2
      routes/ip.js
  3. 8 2
      routes/joke.js
  4. 8 2
      routes/mobile.js
  5. 8 2
      routes/netease.js
  6. 113 89
      routes/v1.js
  7. 8 2
      routes/weather.js
  8. 8 1
      routes/welcome.js
  9. 5 0
      utils/disabledIP.js
  10. 2 2
      utils/logUtils.js

+ 6 - 1
app.js

@@ -58,6 +58,8 @@ var t = setInterval(function() {
         prevTime = +new Date();
     });
 }, 3 * 60 * 1000);
+
+
 /***
  * 全局过滤:统计和日志
  */
@@ -105,7 +107,10 @@ app.use(function(req, res, next) {
             logUtils.print(logs);
         }
     }
-    next();
+    // 处理OPTIONS请求
+    if (req.method === 'OPTIONS') {
+        res.send(200);
+    } else next();
 });
 
 app.use('/', welcome);

+ 8 - 2
routes/ip.js

@@ -2,6 +2,7 @@ var express = require('express');
 var request = require('superagent');
 var router = express.Router();
 var base = 'http://apis.juhe.cn/ip/ip2addr?key=28c0a6a5eb9cca3f38bc5877a83c9868';
+var cookie = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' };
 router.get('/*', function(req, res, next) {
     ip2address(req, res, next);
 });
@@ -23,8 +24,13 @@ function ip2address(req, res, next) {
             message: ''
         }
     };
-    request.get(url).end(function(err, response) {
-        var body = response.text || response.body || {};
+    request.get(url).set(cookie).end(function(err, response) {
+        var body = {};
+        if (response && response.text) {
+            body = response.text;
+        } else if (response && response.body) {
+            body = response.body;
+        }
         if (type !== 'xml') {
             if (typeof body === 'string') {
                 try {

+ 8 - 2
routes/joke.js

@@ -2,6 +2,7 @@ var express = require('express');
 var request = require('superagent');
 var router = express.Router();
 var key = '64a40e3c55e88cc8cd66a78d030bddce';
+var cookie = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' };
 /**
  * Get 请求
  */
@@ -67,8 +68,13 @@ function getJOKE(req, res, next, op) {
             message: ''
         }
     };
-    request.get(url).end(function(err, response) {
-        var body = response.text || response.body || {};
+    request.get(url).set(cookie).end(function(err, response) {
+        var body = {};
+        if (response && response.text) {
+            body = response.text;
+        } else if (response && response.body) {
+            body = response.body;
+        }
         if (typeof body === 'string') {
             try {
                 body = JSON.parse(body);

+ 8 - 2
routes/mobile.js

@@ -2,6 +2,7 @@ var express = require('express');
 var request = require('superagent');
 var router = express.Router();
 var base = 'http://apis.juhe.cn/mobile/get?key=9f719ab7014f2cbdc7b394edf70d0f76';
+var cookie = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' };
 router.get('/', function(req, res, next) {
     getMobile(req, res, next);
 });
@@ -21,8 +22,13 @@ function getMobile(req, res, next) {
             message: ''
         }
     };
-    request.get(url).end(function(err, response) {
-        var body = response.text || response.body || {};
+    request.get(url).set(cookie).end(function(err, response) {
+        var body = {};
+        if (response && response.text) {
+            body = response.text;
+        } else if (response && response.body) {
+            body = response.body;
+        }
         if (type !== 'xml') {
             if (typeof body === 'string') {
                 try {

+ 8 - 2
routes/netease.js

@@ -32,10 +32,16 @@ router.get('/', function(req, res, next) {
 function netease_http(url, next, callback) {
     var headers = {
         Cookie: 'appver=1.5.0.75771;',
-        referer: 'http://music.163.com'
+        referer: 'http://music.163.com',
+        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'
     }
     request.get(url).set(headers).end(function(err, res) {
-        var body = res.text || res.body || {};
+        var body = {};
+        if (res && res.text) {
+            body = res.text;
+        } else if (res && res.body) {
+            body = res.body;
+        }
         if (typeof body === 'string') {
             try {
                 body = JSON.parse(body);

+ 113 - 89
routes/v1.js

@@ -1,6 +1,8 @@
 var express = require('express');
 var request = require('superagent');
 var router = express.Router();
+var disabledIP = require('../utils/disabledIP').list;
+var cookie = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' };
 
 router.get('/*', function(req, res, next) {
     getJSON(req, res, next);
@@ -11,7 +13,7 @@ router.post('/*', function(req, res, next) {
 });
 
 function getJSON(req, res, next) {
-    var ip = req.ip.replace(/\:\:ffff\:/, '').replace(/\:\:1/, '127.0.0.1');
+    var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
     var host = req.hostname;
     var protocol = req.protocol;
     var originalUrl = req.originalUrl;
@@ -25,105 +27,127 @@ function getJSON(req, res, next) {
         },
         status: {
             code: 200,
-            massage: ''
+            message: ''
         }
     };
-    method = req.method.toUpperCase();
-    if (url) {
-        var _temp = {};
-        switch (method) {
-            case 'GET':
-                // get request
-                if (/\?url\=/.test(originalUrl)) {
-                    url = originalUrl.split('url=')[1];
-                }
+    if (disabledIP.indexOf(ip) > -1) {
 
-                if (params) {
-                    for (var i in params) {
-                        _temp[i] = encodeURI(params[i]);
+        output['data']['info'] = '很抱歉,您的IP因为滥用接口已被禁用,如有疑问,请致信 xioveliu@gmail.com ';
+        output['status'] = -1;
+        output['message'] = 'DISABLED IP';
+        res.json(output);
+
+    } else {
+
+        method = req.method.toUpperCase();
+        if (url) {
+            var _temp = {};
+            switch (method) {
+                case 'GET':
+                    // get request
+                    if (/\?url\=/.test(originalUrl)) {
+                        url = originalUrl.split('url=')[1];
                     }
-                }
-                url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
-                url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
-                url = url.replace(/\&callback\=(\w+)/, '');
-                request
-                    .get(url)
-                    .query(_temp)
-                    .end(function(err, response) {
-                        var body = response.text || response.body || {};
-                        if (typeof body === 'string') {
-                            try {
-                                body = JSON.parse(body);
-                            } catch (e) {
-                                output.status = {
-                                    code: -1
-                                };
-                            }
-                        }
-                        if (!err && response.statusCode == 200) {
-                            output = body;
-                        } else {
-                            output = {
-                                data: {},
-                                status: {
-                                    code: -1,
-                                    message: err || 'Something bad happend.'
-                                }
-                            };
-                        }
-                        if (callback) {
-                            res.jsonp(output);
-                        } else {
-                            res.json(output);
+
+                    if (params) {
+                        for (var i in params) {
+                            _temp[i] = encodeURI(params[i]);
                         }
-                    });
-                break;
-            default:
-                // post request
-                if (params) {
-                    for (var i in params) {
-                        _temp[i] = params[i];
                     }
-                }
-                request
-                    .post(url)
-                    .type('form')
-                    .send(_temp)
-                    .end(function(err, response) {
-                        var body = response.text || response.body || {};
-                        if (typeof body === 'string') {
-                            try {
-                                body = JSON.parse(body);
-                            } catch (e) {
-                                output.status = {
-                                    code: -1
+                    url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
+                    url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
+                    url = url.replace(/\&callback\=(\w+)/, '');
+                    request
+                        .get(url)
+                        .set(cookie)
+                        .query(_temp)
+                        .end(function(err, response) {
+                            var body = {};
+                            if (response && response.text) {
+                                body = response.text;
+                            } else if (response && response.body) {
+                                body = response.body;
+                            }
+                            if (typeof body === 'string') {
+                                try {
+                                    body = JSON.parse(body);
+                                } catch (e) {
+                                    output.status = {
+                                        code: -1
+                                    };
+                                }
+                            }
+                            if (!err && response.statusCode == 200) {
+                                output = body;
+                            } else {
+                                output = {
+                                    data: {},
+                                    status: {
+                                        code: -1,
+                                        message: err || 'Something bad happend.'
+                                    }
                                 };
                             }
+                            if (callback) {
+                                res.jsonp(output);
+                            } else {
+                                res.json(output);
+                            }
+                        });
+                    break;
+                default:
+                    // post request
+                    if (params) {
+                        for (var i in params) {
+                            _temp[i] = params[i];
                         }
-                        if (!err && response.statusCode == 200) {
-                            output = body;
-                        } else {
-                            output = {
-                                data: {},
-                                status: {
-                                    code: -1,
-                                    message: err || 'Something bad happend.'
+                    }
+                    request
+                        .post(url)
+                        .set(cookie)
+                        .type('form')
+                        .send(_temp)
+                        .end(function(err, response) {
+                            var body = {};
+                            if (response && response.text) {
+                                body = response.text;
+                            } else if (response && response.body) {
+                                body = response.body;
+                            }
+                            if (typeof body === 'string') {
+                                try {
+                                    body = JSON.parse(body);
+                                } catch (e) {
+                                    output.status = {
+                                        code: -1
+                                    };
                                 }
-                            };
-                        }
-                        if (callback) {
-                            res.jsonp(output);
-                        } else {
-                            res.json(output);
-                        }
-                    });
-                break;
-        }
-    } else {
-        if (callback) {
-            res.jsonp(output);
+                            }
+                            if (!err && response.statusCode == 200) {
+                                output = body;
+                            } else {
+                                output = {
+                                    data: {},
+                                    status: {
+                                        code: -1,
+                                        message: err || 'Something bad happend.'
+                                    }
+                                };
+                            }
+                            if (callback) {
+                                res.jsonp(output);
+                            } else {
+                                res.json(output);
+                            }
+                        });
+                    break;
+            }
         } else {
-            res.json(output);
+            if (callback) {
+                res.jsonp(output);
+            } else {
+                res.json(output);
+            }
         }
     }
 

+ 8 - 2
routes/weather.js

@@ -2,6 +2,7 @@ var express = require('express');
 var request = require('superagent');
 var router = express.Router();
 var base = 'http://op.juhe.cn/onebox/weather/query?key=e0540a109f5a73e9df2981cdeb9d106f';
+var cookie = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' };
 router.get('/*', function(req, res, next) {
     getMobile(req, res, next);
 });
@@ -22,8 +23,13 @@ function getMobile(req, res, next) {
             message: ''
         }
     };
-    request.get(url).end(function(err, response) {
-        var body = response.text || response.body || {};
+    request.get(url).set(cookie).end(function(err, response) {
+        var body = {};
+        if (response && response.text) {
+            body = response.text;
+        } else if (response && response.body) {
+            body = response.body;
+        }
         if (type !== 'xml') {
             if (typeof body === 'string') {
                 try {

+ 8 - 1
routes/welcome.js

@@ -1,6 +1,7 @@
 var express = require('express');
 var request = require('superagent');
 var config = require('../configs/config').site;
+var cookie = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36' };
 var router = express.Router();
 
 /* GET home page. */
@@ -25,8 +26,14 @@ function ip2addr(ip, callback) {
     request
         .get('http://apis.juhe.cn/ip/ip2addr')
         .query({ ip: ip, key: '28c0a6a5eb9cca3f38bc5877a83c9868' })
+        .set(cookie)
         .end(function(err, res) {
-            var body = res.text || res.body || {};
+            var body = {};
+            if (res && res.text) {
+                body = res.text;
+            } else if (res && res.body) {
+                body = res.body;
+            }
             if (!err && res.statusCode == 200) {
                 if (typeof body === 'string') {
                     try {

+ 5 - 0
utils/disabledIP.js

@@ -0,0 +1,5 @@
+module.exports = {
+    list: [
+        // '117.144.208.34'
+    ]
+};

+ 2 - 2
utils/logUtils.js

@@ -1,7 +1,7 @@
-var storage = require('./dbUtils');
+//var storage = require('./dbUtils');
 module.exports = {
     print: function(params) {
-        storage.set({});
+        //storage.set({});
         var arr = ['-------------------------------------'];
         // var date = new Date();
         // var month = date.getMonth() + 1;