123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- 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 || '';
- // let cb = req.query.cb || '';
- // getJSON(req, res, next);
- convert(req, res, next)
- });
- router.post('/*', function(req, res, next) {
- // getJSON(req, res, next);
- convert(req, res, next)
- });
- const convert = (req, res, next) => {
- let host = req.hostname;
- let protocol = req.protocol;
- let method = req.method.toUpperCase();
- 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,
- 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;
- }
- }
- 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: ''
- }
- };
- // 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':
- // let originalUrl = req.originalUrl;
- // originalUrl = originalUrl.replace(/\/v1\?/,'').replace('?','&');
- // break;
- // }
- // if (link) {
- // let
- // switch (method) {
- // case 'GET':
- // link +=
- // }
- // }
- //console.log(req.headers)
- }
- 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;
|