const express = require('express'); const request = require('request'); const router = express.Router(); const disabledIP = require('../utils/disabledIP').list; const qs = require('qs'); const utils = require('../utils/utils'); router.get('/*', function(req, res, next) { convert(req, res, next) }); router.post('/*', function(req, res, next) { convert(req, res, next) }); const convert = (req, res, next) => { let params = utils.convert(req,res,next); let config = params[0]; let protocol = params[1]; let host = params[2]; let cb = params[3]; let output = { data: {}, status: { code: -1, message: 'Please Set URL Like This: ' + protocol + '://' + host + '/v2/?url=http[s]://YourWantProxyUrl.Com' } }; if(config.uri){ utils.createServer(config).then(ret => { cb && res.jsonp(ret) || res.send(ret); }).catch(ex => { output = { status: { code: -2, message: Object.keys(ex).length>0 ? ex : 'unknow error, please checked your link' } } cb && res.jsonp(output) || res.send(output); }); }else{ cb && res.jsonp(output) || res.send(output); } } const createServer = (config) => { return new Promise((resolve, reject) => { console.log(config) request(config, (err, ret, body) => { //console.log(ret) if (!err && ret.statusCode === 200) { // console.log(qs.parse(unescape(body))) resolve(body) } else { reject(err) } }) }) } function getJSON(req, res, next) { 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; var url = req.query.url || req.body.url; var callback = req.query.callback || req.body.callback; var params = req.body; var output = { data: { IP: ip, Info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.Com' }, status: { code: 200, message: '' } }; if (disabledIP.indexOf(ip) > -1) { output['data']['info'] = '很抱歉,您的IP因为滥用接口已被禁用,如有疑问,请致信 xioveliu@gmail.com '; output['status'] = -1; output['message'] = 'DISABLED IP'; res.json(output); } else { method = req.method.toUpperCase(); var _cookies = req.cookies; var headers = { 'user-agent': req.headers['user-agent'] }; //console.log(headers); if (url) { var _temp = {}; switch (method) { case 'GET': // get request if (/\?url\=/.test(originalUrl)) { url = originalUrl.split('url=')[1]; } if (params) { for (var i in params) { _temp[i] = encodeURI(params[i]); } } url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url; url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url; url = url.replace(/\&callback\=(\w+)/, ''); request .get(url) .set(headers) .set(_cookies) .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]; } } request .post(url) .set(headers) .set(_cookies) .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 (!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 { if (callback) { res.jsonp(output); } else { res.json(output); } } } } module.exports = router;