v1.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. var express = require('express');
  2. var request = require('superagent');
  3. var router = express.Router();
  4. var disabledIP = require('../utils/disabledIP').list;
  5. 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' };
  6. router.get('/*', function(req, res, next) {
  7. getJSON(req, res, next);
  8. });
  9. router.post('/*', function(req, res, next) {
  10. getJSON(req, res, next);
  11. });
  12. function getJSON(req, res, next) {
  13. var ip = req.headers['x-real-ip'] ? req.headers['x-real-ip'] : req.ip.replace(/::ffff:/, '');
  14. var host = req.hostname;
  15. var protocol = req.protocol;
  16. var originalUrl = req.originalUrl;
  17. var url = req.query.url || req.body.url;
  18. var callback = req.query.callback || req.body.callback;
  19. var params = req.body;
  20. var output = {
  21. data: {
  22. IP: ip,
  23. Info: 'Please Set URL Like This: ' + protocol + '://' + host + '/v1/?url=http[s]://YourWantProxyUrl.Com'
  24. },
  25. status: {
  26. code: 200,
  27. message: ''
  28. }
  29. };
  30. if (disabledIP.indexOf(ip) > -1) {
  31. output['data']['info'] = '很抱歉,您的IP因为滥用接口已被禁用,如有疑问,请致信 xioveliu@gmail.com ';
  32. output['status'] = -1;
  33. output['message'] = 'DISABLED IP';
  34. res.json(output);
  35. } else {
  36. method = req.method.toUpperCase();
  37. var _cookies = req.cookies;
  38. var headers = { 'user-agent': req.headers['user-agent'] };
  39. //console.log(headers);
  40. if (url) {
  41. var _temp = {};
  42. switch (method) {
  43. case 'GET':
  44. // get request
  45. if (/\?url\=/.test(originalUrl)) {
  46. url = originalUrl.split('url=')[1];
  47. }
  48. if (params) {
  49. for (var i in params) {
  50. _temp[i] = encodeURI(params[i]);
  51. }
  52. }
  53. url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
  54. url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
  55. url = url.replace(/\&callback\=(\w+)/, '');
  56. request
  57. .get(url)
  58. .set(headers)
  59. .set(_cookies)
  60. .query(_temp)
  61. .end(function(err, response) {
  62. var body = {};
  63. if (response && response.text) {
  64. body = response.text;
  65. } else if (response && response.body) {
  66. body = response.body;
  67. }
  68. if (typeof body === 'string') {
  69. try {
  70. body = JSON.parse(body);
  71. } catch (e) {
  72. output.status = {
  73. code: -1
  74. };
  75. }
  76. }
  77. if (!err && response.statusCode == 200) {
  78. output = body;
  79. } else {
  80. output = {
  81. data: {},
  82. status: {
  83. code: -1,
  84. message: err || 'Something bad happend.'
  85. }
  86. };
  87. }
  88. if (callback) {
  89. res.jsonp(output);
  90. } else {
  91. res.json(output);
  92. }
  93. });
  94. break;
  95. default:
  96. // post request
  97. if (params) {
  98. for (var i in params) {
  99. _temp[i] = params[i];
  100. }
  101. }
  102. request
  103. .post(url)
  104. .set(headers)
  105. .set(_cookies)
  106. .type('form')
  107. .send(_temp)
  108. .end(function(err, response) {
  109. var body = {};
  110. if (response && response.text) {
  111. body = response.text;
  112. } else if (response && response.body) {
  113. body = response.body;
  114. }
  115. if (typeof body === 'string') {
  116. try {
  117. body = JSON.parse(body);
  118. } catch (e) {
  119. output.status = {
  120. code: -1
  121. };
  122. }
  123. }
  124. if (!err && response.statusCode == 200) {
  125. output = body;
  126. } else {
  127. output = {
  128. data: {},
  129. status: {
  130. code: -1,
  131. message: err || 'Something bad happend.'
  132. }
  133. };
  134. }
  135. if (callback) {
  136. res.jsonp(output);
  137. } else {
  138. res.json(output);
  139. }
  140. });
  141. break;
  142. }
  143. } else {
  144. if (callback) {
  145. res.jsonp(output);
  146. } else {
  147. res.json(output);
  148. }
  149. }
  150. }
  151. }
  152. module.exports = router;