v2.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. const express = require('express');
  2. const request = require('request');
  3. const router = express.Router();
  4. const disabledIP = require('../utils/disabledIP').list;
  5. const qs = require('qs');
  6. router.get('/*', function(req, res, next) {
  7. // let link = req.query.url || '';
  8. // let cb = req.query.cb || '';
  9. // getJSON(req, res, next);
  10. convert(req, res, next)
  11. });
  12. router.post('/*', function(req, res, next) {
  13. // getJSON(req, res, next);
  14. convert(req, res, next)
  15. });
  16. const convert = (req, res, next) => {
  17. let host = req.hostname;
  18. let protocol = req.protocol;
  19. let method = req.method.toUpperCase();
  20. let ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
  21. let _params = method === 'GET' ? req.query : req.body;
  22. let cb = _params.callback;
  23. let headers = req.headers;
  24. let config = {
  25. method: method,
  26. gzip: true
  27. };
  28. let params = {};
  29. for (let i in _params) {
  30. let temp = _params[i];
  31. if (i === 'url') {
  32. let o = temp.split('?');
  33. let uri = o[0]
  34. config['uri'] = uri;
  35. //headers['origin'] = uri;
  36. headers['host'] = uri.replace(/^(http|https):\/\//g, '').split('/')[0];
  37. if (o.length > 1) {
  38. o[1].split('&').forEach(item => {
  39. let k = item.split('=');
  40. params[k[0]] = encodeURI(k[1]);
  41. })
  42. }
  43. } else {
  44. params[i] = temp;
  45. }
  46. }
  47. if (method === 'POST') config['json'] = params;
  48. else config.uri = `${config.uri}?${qs.stringify(params)}`;
  49. config['headers'] = headers;
  50. let output = {
  51. data: {
  52. IP: ip,
  53. Info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.Com'
  54. },
  55. status: {
  56. code: 200,
  57. message: ''
  58. }
  59. };
  60. // res.send(config);
  61. // return;
  62. if (config.uri) {
  63. createServer(config).then(ret => {
  64. cb && res.jsonp(ret) || res.send(ret);
  65. }).catch(ex => {
  66. output = {
  67. status: {
  68. code: -1,
  69. message: ex || 'unknow error, please checked your link'
  70. }
  71. }
  72. cb && res.jsonp(output) || res.send(output);
  73. })
  74. } else {
  75. cb && res.jsonp(output) || res.send(output)
  76. }
  77. // res.send(config)
  78. // return;
  79. // var options = {
  80. // uri: 'https://www.googleapis.com/urlshortener/v1/url',
  81. // method: 'get',
  82. // json: { "longUrl": "http://www.google.com/" }
  83. // };
  84. // console.log(config)
  85. // createServer(config).then(ret => {
  86. // console.log(ret)
  87. // }).catch(ex => {
  88. // console.log(ex)
  89. // })
  90. // switch(method){
  91. // case 'GET':
  92. // let originalUrl = req.originalUrl;
  93. // originalUrl = originalUrl.replace(/\/v1\?/,'').replace('?','&');
  94. // break;
  95. // }
  96. // if (link) {
  97. // let
  98. // switch (method) {
  99. // case 'GET':
  100. // link +=
  101. // }
  102. // }
  103. //console.log(req.headers)
  104. }
  105. const createServer = (config) => {
  106. return new Promise((resolve, reject) => {
  107. console.log(config)
  108. request(config, (err, ret, body) => {
  109. //console.log(ret)
  110. if (!err && ret.statusCode === 200) {
  111. // console.log(qs.parse(unescape(body)))
  112. resolve(body)
  113. } else {
  114. reject(err)
  115. }
  116. })
  117. })
  118. }
  119. function getJSON(req, res, next) {
  120. var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
  121. var host = req.hostname;
  122. var protocol = req.protocol;
  123. var originalUrl = req.originalUrl;
  124. var url = req.query.url || req.body.url;
  125. var callback = req.query.callback || req.body.callback;
  126. var params = req.body;
  127. var output = {
  128. data: {
  129. IP: ip,
  130. Info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.Com'
  131. },
  132. status: {
  133. code: 200,
  134. message: ''
  135. }
  136. };
  137. if (disabledIP.indexOf(ip) > -1) {
  138. output['data']['info'] = '很抱歉,您的IP因为滥用接口已被禁用,如有疑问,请致信 xioveliu@gmail.com ';
  139. output['status'] = -1;
  140. output['message'] = 'DISABLED IP';
  141. res.json(output);
  142. } else {
  143. method = req.method.toUpperCase();
  144. var _cookies = req.cookies;
  145. var headers = { 'user-agent': req.headers['user-agent'] };
  146. //console.log(headers);
  147. if (url) {
  148. var _temp = {};
  149. switch (method) {
  150. case 'GET':
  151. // get request
  152. if (/\?url\=/.test(originalUrl)) {
  153. url = originalUrl.split('url=')[1];
  154. }
  155. if (params) {
  156. for (var i in params) {
  157. _temp[i] = encodeURI(params[i]);
  158. }
  159. }
  160. url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
  161. url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
  162. url = url.replace(/\&callback\=(\w+)/, '');
  163. request
  164. .get(url)
  165. .set(headers)
  166. .set(_cookies)
  167. .query(_temp)
  168. .end(function(err, response) {
  169. var body = {};
  170. if (response && response.text) {
  171. body = response.text;
  172. } else if (response && response.body) {
  173. body = response.body;
  174. }
  175. if (typeof body === 'string') {
  176. try {
  177. body = JSON.parse(body);
  178. } catch (e) {
  179. output.status = {
  180. code: -1
  181. };
  182. }
  183. }
  184. if (!err && response.statusCode == 200) {
  185. output = body;
  186. } else {
  187. output = {
  188. data: {},
  189. status: {
  190. code: -1,
  191. message: err || 'Something bad happend.'
  192. }
  193. };
  194. }
  195. if (callback) {
  196. res.jsonp(output);
  197. } else {
  198. res.json(output);
  199. }
  200. });
  201. break;
  202. default:
  203. // post request
  204. if (params) {
  205. for (var i in params) {
  206. _temp[i] = params[i];
  207. }
  208. }
  209. request
  210. .post(url)
  211. .set(headers)
  212. .set(_cookies)
  213. .type('form')
  214. .send(_temp)
  215. .end(function(err, response) {
  216. var body = {};
  217. if (response && response.text) {
  218. body = response.text;
  219. } else if (response && response.body) {
  220. body = response.body;
  221. }
  222. if (typeof body === 'string') {
  223. try {
  224. body = JSON.parse(body);
  225. } catch (e) {
  226. output.status = {
  227. code: -1
  228. };
  229. }
  230. }
  231. if (!err && response.statusCode == 200) {
  232. output = body;
  233. } else {
  234. output = {
  235. data: {},
  236. status: {
  237. code: -1,
  238. message: err || 'Something bad happend.'
  239. }
  240. };
  241. }
  242. if (callback) {
  243. res.jsonp(output);
  244. } else {
  245. res.json(output);
  246. }
  247. });
  248. break;
  249. }
  250. } else {
  251. if (callback) {
  252. res.jsonp(output);
  253. } else {
  254. res.json(output);
  255. }
  256. }
  257. }
  258. }
  259. module.exports = router;