v1.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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. if (url) {
  39. var _temp = {};
  40. switch (method) {
  41. case 'GET':
  42. // get request
  43. if (/\?url\=/.test(originalUrl)) {
  44. url = originalUrl.split('url=')[1];
  45. }
  46. if (params) {
  47. for (var i in params) {
  48. _temp[i] = encodeURI(params[i]);
  49. }
  50. }
  51. url = url.indexOf('?') === -1 ? url.replace(/\&/, '?') : url;
  52. url = /^(http|https)\:\/\//.test(url) ? url : 'http://' + url;
  53. url = url.replace(/\&callback\=(\w+)/, '');
  54. request
  55. .get(url)
  56. .set(cookie)
  57. .set(_cookies)
  58. .query(_temp)
  59. .end(function(err, response) {
  60. var body = {};
  61. if (response && response.text) {
  62. body = response.text;
  63. } else if (response && response.body) {
  64. body = response.body;
  65. }
  66. if (typeof body === 'string') {
  67. try {
  68. body = JSON.parse(body);
  69. } catch (e) {
  70. output.status = {
  71. code: -1
  72. };
  73. }
  74. }
  75. if (!err && response.statusCode == 200) {
  76. output = body;
  77. } else {
  78. output = {
  79. data: {},
  80. status: {
  81. code: -1,
  82. message: err || 'Something bad happend.'
  83. }
  84. };
  85. }
  86. if (callback) {
  87. res.jsonp(output);
  88. } else {
  89. res.json(output);
  90. }
  91. });
  92. break;
  93. default:
  94. // post request
  95. if (params) {
  96. for (var i in params) {
  97. _temp[i] = params[i];
  98. }
  99. }
  100. request
  101. .post(url)
  102. .set(cookie)
  103. .set(_cookies)
  104. .type('form')
  105. .send(_temp)
  106. .end(function(err, response) {
  107. var body = {};
  108. if (response && response.text) {
  109. body = response.text;
  110. } else if (response && response.body) {
  111. body = response.body;
  112. }
  113. if (typeof body === 'string') {
  114. try {
  115. body = JSON.parse(body);
  116. } catch (e) {
  117. output.status = {
  118. code: -1
  119. };
  120. }
  121. }
  122. if (!err && response.statusCode == 200) {
  123. output = body;
  124. } else {
  125. output = {
  126. data: {},
  127. status: {
  128. code: -1,
  129. message: err || 'Something bad happend.'
  130. }
  131. };
  132. }
  133. if (callback) {
  134. res.jsonp(output);
  135. } else {
  136. res.json(output);
  137. }
  138. });
  139. break;
  140. }
  141. } else {
  142. if (callback) {
  143. res.jsonp(output);
  144. } else {
  145. res.json(output);
  146. }
  147. }
  148. }
  149. }
  150. module.exports = router;