v2.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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. const utils = require('../utils/utils');
  7. router.get('/*', function(req, res, next) {
  8. convert(req, res, next)
  9. });
  10. router.post('/*', function(req, res, next) {
  11. convert(req, res, next)
  12. });
  13. const convert = (req, res, next) => {
  14. let params = utils.convert(req,res,next);
  15. let config = params[0];
  16. let protocol = params[1];
  17. let host = params[2];
  18. let cb = params[3];
  19. let output = {
  20. data: {},
  21. status: {
  22. code: -1,
  23. message: 'Please Set URL Like This: ' + protocol + '://' + host + '/v2/?url=http[s]://YourWantProxyUrl.Com'
  24. }
  25. };
  26. if(config.uri){
  27. utils.createServer(config).then(ret => {
  28. cb && res.jsonp(ret) || res.send(ret);
  29. }).catch(ex => {
  30. output = {
  31. status: {
  32. code: -2,
  33. message: Object.keys(ex).length>0 ? ex : 'unknow error, please checked your link'
  34. }
  35. }
  36. cb && res.jsonp(output) || res.send(output);
  37. });
  38. }else{
  39. cb && res.jsonp(output) || res.send(output);
  40. }
  41. }
  42. const createServer = (config) => {
  43. return new Promise((resolve, reject) => {
  44. console.log(config)
  45. request(config, (err, ret, body) => {
  46. //console.log(ret)
  47. if (!err && ret.statusCode === 200) {
  48. // console.log(qs.parse(unescape(body)))
  49. resolve(body)
  50. } else {
  51. reject(err)
  52. }
  53. })
  54. })
  55. }
  56. function getJSON(req, res, next) {
  57. var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
  58. var host = req.hostname;
  59. var protocol = req.protocol;
  60. var originalUrl = req.originalUrl;
  61. var url = req.query.url || req.body.url;
  62. var callback = req.query.callback || req.body.callback;
  63. var params = req.body;
  64. var output = {
  65. data: {
  66. IP: ip,
  67. Info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.Com'
  68. },
  69. status: {
  70. code: 200,
  71. message: ''
  72. }
  73. };
  74. if (disabledIP.indexOf(ip) > -1) {
  75. output['data']['info'] = '很抱歉,您的IP因为滥用接口已被禁用,如有疑问,请致信 xioveliu@gmail.com ';
  76. output['status'] = -1;
  77. output['message'] = 'DISABLED IP';
  78. res.json(output);
  79. } else {
  80. method = req.method.toUpperCase();
  81. var _cookies = req.cookies;
  82. var headers = { 'user-agent': req.headers['user-agent'] };
  83. //console.log(headers);
  84. if (url) {
  85. var _temp = {};
  86. switch (method) {
  87. case 'GET':
  88. // get request
  89. if (/\?url\=/.test(originalUrl)) {
  90. url = originalUrl.split('url=')[1];
  91. }
  92. if (params) {
  93. for (var i in params) {
  94. _temp[i] = encodeURI(params[i]);
  95. }
  96. }
  97. url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
  98. url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
  99. url = url.replace(/\&callback\=(\w+)/, '');
  100. request
  101. .get(url)
  102. .set(headers)
  103. .set(_cookies)
  104. .query(_temp)
  105. .end(function(err, response) {
  106. var body = {};
  107. if (response && response.text) {
  108. body = response.text;
  109. } else if (response && response.body) {
  110. body = response.body;
  111. }
  112. if (typeof body === 'string') {
  113. try {
  114. body = JSON.parse(body);
  115. } catch (e) {
  116. output.status = {
  117. code: -1
  118. };
  119. }
  120. }
  121. if (!err && response.statusCode == 200) {
  122. output = body;
  123. } else {
  124. output = {
  125. data: {},
  126. status: {
  127. code: -1,
  128. message: err || 'Something bad happend.'
  129. }
  130. };
  131. }
  132. if (callback) {
  133. res.jsonp(output);
  134. } else {
  135. res.json(output);
  136. }
  137. });
  138. break;
  139. default:
  140. // post request
  141. if (params) {
  142. for (var i in params) {
  143. _temp[i] = params[i];
  144. }
  145. }
  146. request
  147. .post(url)
  148. .set(headers)
  149. .set(_cookies)
  150. .type('form')
  151. .send(_temp)
  152. .end(function(err, response) {
  153. var body = {};
  154. if (response && response.text) {
  155. body = response.text;
  156. } else if (response && response.body) {
  157. body = response.body;
  158. }
  159. if (typeof body === 'string') {
  160. try {
  161. body = JSON.parse(body);
  162. } catch (e) {
  163. output.status = {
  164. code: -1
  165. };
  166. }
  167. }
  168. if (!err && response.statusCode == 200) {
  169. output = body;
  170. } else {
  171. output = {
  172. data: {},
  173. status: {
  174. code: -1,
  175. message: err || 'Something bad happend.'
  176. }
  177. };
  178. }
  179. if (callback) {
  180. res.jsonp(output);
  181. } else {
  182. res.json(output);
  183. }
  184. });
  185. break;
  186. }
  187. } else {
  188. if (callback) {
  189. res.jsonp(output);
  190. } else {
  191. res.json(output);
  192. }
  193. }
  194. }
  195. }
  196. module.exports = router;