MikFoxi

Прокси сервер для сайта на php, почти почти Cloudflare.

Oct 24th, 2019
3,209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.47 KB | None | 0 0
  1. <?php
  2. error_reporting(0);
  3. ignore_user_abort(false);
  4. ini_set('display_errors', 'off');
  5. $start_time = microtime(true);
  6.  
  7. // входные данные:
  8. $time = time();
  9. $uri = trim(strip_tags($_SERVER['REQUEST_URI']));
  10. $host = isset($_SERVER['HTTP_HOST']) ? preg_replace("/[^0-9A-Za-z-.:]/","",mb_strtolower(strip_tags(trim($_SERVER['HTTP_HOST'])), 'UTF-8')) : 'localhost';
  11. $referer = isset($_SERVER['HTTP_REFERER']) ? strip_tags(trim($_SERVER['HTTP_REFERER'])) : '';
  12. $useragent = isset($_SERVER['HTTP_USER_AGENT']) ? trim(strip_tags($_SERVER['HTTP_USER_AGENT'])) : '';
  13. $cookie = isset($_SERVER['HTTP_COOKIE']) ? trim(strip_tags($_SERVER['HTTP_COOKIE'])) : '';
  14. $http_accept = isset($_SERVER['HTTP_ACCEPT']) ? trim(strip_tags($_SERVER['HTTP_ACCEPT'])) : '';
  15. $http_accept_language = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? trim(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE'])) : '';
  16. // это будем слать:
  17. $headers = [
  18.     'Accept: '.$http_accept,
  19.     'Accept-Encoding: gzip, deflate',
  20.     'Accept-Language: '.$http_accept_language,
  21.     'Cache-Control: no-cache',
  22.     'Host: '.$host,
  23.     'Referer: '.$referer,
  24.     'User-Agent: '.$useragent
  25. ];
  26. // это тоже слать, если вдруг клаудфлар:
  27. if (isset($_SERVER['HTTP_CDN_LOOP'])) {$headers[] = 'CDN-Loop: '.trim(strip_tags($_SERVER['HTTP_CDN_LOOP']));}
  28. if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {$headers[] = 'CF-Connecting-IP: '.trim(strip_tags($_SERVER['HTTP_CF_CONNECTING_IP']));} else {$headers[] = 'CF-Connecting-IP: '.trim(strip_tags($_SERVER['REMOTE_ADDR']));}
  29. if (isset($_SERVER['HTTP_CF_VISITOR'])) {$headers[] = 'Cf-Visitor: '.trim(strip_tags($_SERVER['HTTP_CF_VISITOR']));}
  30. if (isset($_SERVER['HTTP_CF_RAY'])) {$headers[] = 'Cf-Ray: '.trim(strip_tags($_SERVER['HTTP_CF_RAY']));}
  31. if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$headers[] = 'X-Forwarded-For: '.trim(strip_tags($_SERVER['HTTP_X_FORWARDED_FOR']));}
  32. if (isset($_SERVER['HTTP_CF_IPCOUNTRY'])) {$headers[] = 'Cf-Ipcountry: '.trim(strip_tags($_SERVER['HTTP_CF_IPCOUNTRY']));}
  33. if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {$headers[] = 'X-Forwarded-Proto: '.trim(strip_tags($_SERVER['HTTP_X_FORWARDED_PROTO']));}
  34.  
  35. //print_r($headers);
  36. $ch = curl_init();
  37. curl_setopt($ch, CURLOPT_URL, 'http://123.123.123.123'.$uri);
  38. curl_setopt($ch, CURLOPT_HEADER, false);
  39. curl_setopt($ch, CURLINFO_HEADER_OUT, true);
  40. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  41. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  42. curl_setopt($ch, CURLOPT_POST, 1);
  43. curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
  44. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  45. }
  46. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  47. curl_setopt($ch, CURLOPT_TIMEOUT, 6);
  48. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
  49. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  50. curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
  51. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  52. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  53. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  54. curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  55. curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
  56. $outch = curl_exec($ch);
  57. $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  58. $content_type = strip_tags(curl_getinfo($ch, CURLINFO_CONTENT_TYPE));
  59. curl_close($ch);
  60. if($http_code == 404) {
  61. header('HTTP/1.1 404 Not Found');
  62. header('Status: 404 Not Found');
  63. } else {
  64. header('Content-Type: '.$content_type);
  65. }
  66. echo $outch;
  67. $exec_time = microtime(true) - $start_time;
  68. $exec_time = round($exec_time, 5);
  69. //echo '<!-- Time: '.$exec_time.' Sec. -->';
Add Comment
Please, Sign In to add comment