dotos 8 éve
szülő
commit
a05a8bdf53
3 módosított fájl, 128 hozzáadás és 69 törlés
  1. 2 0
      app.js
  2. 47 46
      package.json
  3. 79 23
      routes/v2.js

+ 2 - 0
app.js

@@ -15,6 +15,7 @@ var ip = require('./routes/ip');
 var netease = require('./routes/netease');
 //JsonBird version 1.0
 var v1 = require('./routes/v1');
+var v2 = require('./routes/v2');
 //笑话接口
 var joke = require('./routes/joke');
 //手机号码归属地接口
@@ -64,6 +65,7 @@ app.use('/', welcome);
 // app.use('/test', test);
 app.use('/ip', ip);
 app.use('/v1', v1);
+app.use('/v2', v2);
 app.use('/netease', netease);
 app.use('/joke', joke);
 app.use('/mobile', mobile);

+ 47 - 46
package.json

@@ -1,47 +1,48 @@
 {
-    "name": "JsonBird",
-    "version": "1.4.0",
-    "description": "A remote data interface proxy service",
-    "author": {
-        "name": "xCss",
-        "mail": "yy.liu@foxmail.com"
-    },
-    "license": "MIT",
-    "private": true,
-    "scripts": {
-        "start": "supervisor node ./bin/www",
-        "super": "supervisor ./bin/www"
-    },
-    "repository": {
-        "type": "git",
-        "url": "git+https://github.com/xCss/JsonBird.git"
-    },
-    "keywords": [
-        "JsonBird",
-        "proxy",
-        "data interface proxy",
-        "remote data interface proxy"
-    ],
-    "bugs": {
-        "url": "https://github.com/xCss/JsonBird/issues"
-    },
-    "readme": "./readme.md",
-    "homepage": "https://github.com/xCss/JsonBird#readme",
-    "dependencies": {
-        "big-integer": "^1.6.17",
-        "blueimp-md5": "^2.7.0",
-        "body-parser": "~1.15.1",
-        "cookie-parser": "~1.4.3",
-        "debug": "~2.2.0",
-        "express": "~4.13.4",
-        "express-generator": "^4.13.4",
-        "helmet": "^2.3.0",
-        "js-base64": "^2.1.9",
-        "morgan": "~1.7.0",
-        "pug": "^2.0.0-beta6",
-        "querystring": "^0.2.0",
-        "request": "^2.81.0",
-        "serve-favicon": "~2.3.0",
-        "superagent": "^2.3.0"
-    }
-}
+  "name": "JsonBird",
+  "version": "1.4.0",
+  "description": "A remote data interface proxy service",
+  "author": {
+    "name": "xCss",
+    "mail": "yy.liu@foxmail.com"
+  },
+  "license": "MIT",
+  "private": true,
+  "scripts": {
+    "start": "supervisor node ./bin/www",
+    "super": "supervisor ./bin/www"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xCss/JsonBird.git"
+  },
+  "keywords": [
+    "JsonBird",
+    "proxy",
+    "data interface proxy",
+    "remote data interface proxy"
+  ],
+  "bugs": {
+    "url": "https://github.com/xCss/JsonBird/issues"
+  },
+  "readme": "./readme.md",
+  "homepage": "https://github.com/xCss/JsonBird#readme",
+  "dependencies": {
+    "big-integer": "^1.6.17",
+    "blueimp-md5": "^2.7.0",
+    "body-parser": "~1.15.1",
+    "cookie-parser": "~1.4.3",
+    "debug": "~2.2.0",
+    "express": "~4.13.4",
+    "express-generator": "^4.13.4",
+    "helmet": "^2.3.0",
+    "js-base64": "^2.1.9",
+    "lodash": "^4.17.4",
+    "morgan": "~1.7.0",
+    "pug": "^2.0.0-beta6",
+    "querystring": "^0.2.0",
+    "request": "^2.81.0",
+    "serve-favicon": "~2.3.0",
+    "superagent": "^2.3.0"
+  }
+}

+ 79 - 23
routes/v2.js

@@ -1,9 +1,8 @@
-var express = require('express');
-var request = require('request');
-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' };
-
+const express = require('express');
+const request = require('request');
+const router = express.Router();
+const disabledIP = require('../utils/disabledIP').list;
+const qs = require('qs');
 
 router.get('/*', function(req, res, next) {
     // let link = req.query.url || '';
@@ -18,27 +17,81 @@ router.post('/*', function(req, res, next) {
 });
 
 const convert = (req, res, next) => {
+    let host = req.hostname;
+    let protocol = req.protocol;
     let method = req.method.toUpperCase();
-    let link = req.query.url || req.body.url;
-    let cb = req.query.callback || req.body.callback;
-    let params = req.body;
+    let ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
+    let _params = method === 'GET' ? req.query : req.body;
+    let cb = _params.callback;
+    let headers = req.headers;
     let config = {
         method: method,
-        uri: link,
-        json: params,
-        headers: req.headers
+        gzip: true
+    };
+    let params = {};
+    for (let i in _params) {
+        let temp = _params[i];
+        if (i === 'url') {
+            let o = temp.split('?');
+            let uri = o[0]
+            config['uri'] = uri;
+            //headers['origin'] = uri;
+            headers['host'] = uri.replace(/^(http|https):\/\//g, '').split('/')[0];
+            if (o.length > 1) {
+                o[1].split('&').forEach(item => {
+                    let k = item.split('=');
+                    params[k[0]] = encodeURI(k[1]);
+                })
+            }
+        } else {
+            params[i] = temp;
+        }
     }
-
-    var options = {
-        uri: 'https://www.googleapis.com/urlshortener/v1/url',
-        method: 'get',
-        json: { "longUrl": "http://www.google.com/" }
+    if (method === 'POST') config['json'] = params;
+    else config.uri = `${config.uri}?${qs.stringify(params)}`;
+    config['headers'] = headers;
+    let output = {
+        data: {
+            IP: ip,
+            Info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.Com'
+        },
+        status: {
+            code: 200,
+            message: ''
+        }
     };
-    createServer(options).then(ret => {
-        console.log(ret)
-    }).catch(ex => {
-        console.log(ex)
-    })
+    // res.send(config);
+    // return;
+    if (config.uri) {
+        createServer(config).then(ret => {
+            cb && res.jsonp(ret) || res.send(ret);
+        }).catch(ex => {
+            output = {
+                status: {
+                    code: -1,
+                    message: ex || 'unknow error, please checked your link'
+                }
+            }
+            cb && res.jsonp(output) || res.send(output);
+        })
+    } else {
+        cb && res.jsonp(output) || res.send(output)
+    }
+
+    // res.send(config)
+    // return;
+
+    // var options = {
+    //     uri: 'https://www.googleapis.com/urlshortener/v1/url',
+    //     method: 'get',
+    //     json: { "longUrl": "http://www.google.com/" }
+    // };
+    // console.log(config)
+    // createServer(config).then(ret => {
+    //     console.log(ret)
+    // }).catch(ex => {
+    //     console.log(ex)
+    // })
 
     // switch(method){
     //     case 'GET':
@@ -61,9 +114,12 @@ const convert = (req, res, next) => {
 
 const createServer = (config) => {
     return new Promise((resolve, reject) => {
+        console.log(config)
         request(config, (err, ret, body) => {
+            //console.log(ret)
             if (!err && ret.statusCode === 200) {
-                resolve(JSON.parse(body))
+                // console.log(qs.parse(unescape(body)))
+                resolve(body)
             } else {
                 reject(err)
             }