v1.js 7.5 KB

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