v1.js 6.2 KB

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