За последние 24 часа нас посетили 17454 программиста и 1635 роботов. Сейчас ищут 1964 программиста ...

Доработать ретранслятор удаленного сайта

Тема в разделе "PHP Free-Lance", создана пользователем BlackBoys, 14 ноя 2016.

  1. BlackBoys

    BlackBoys Активный пользователь

    С нами с:
    30 дек 2008
    Сообщения:
    4
    Симпатии:
    0
    Написал простенький код который используя curl по https получает страницу из удаленного сайта и отображает пользователю.
    Скрипт полностью должен ретранслировать удаленный сайт (в том числе кукисы и все остальное).
    В моем коде все работает, по ссылкам ходит, куки передает, но формы на сайте не отправляются, авторизоваться не получается.
    Нужно сделать так чтобы авторизация происходила, формы работали, т.е. весь сайт работал полностью.

    Необходимо доработать мой код.

    PHP:
    1. <?
    2.  
    3.  
    4. // Делаем запрос
    5. //$aa - Путь запроса
    6. //$bb - Имеетс¤ ли POST запрос или нет 1 -да 2- нет
    7. //$ff - Содержимое POST запроса
    8. //$cc - Имеютс¤ ли  укисы ли вывести ответ? 1 -да 2- нет
    9. //$ee - содержимое кукисов
    10. //$dd - Включить ли в ответ заголовок?  1 -да 2- нет
    11. //$gg - Содержимое GET запроса
    12. //$ii - Сессия
    13.  
    14. $aaa = $_SERVER['REQUEST_URI']; // путь запроса грабим из htaccess
    15. $ddd = true; // Включаем заголовок
    16.  
    17. if ($_GET) {
    18.     $ggg = "?";
    19.  
    20.     //$ggg = "";
    21.     foreach ( $_GET as $key => $value )
    22.         $ggg .= "&".rawurlencode($key)."=".rawurlencode($value);
    23.     $ggg = substr( $ggg, 1 );
    24.    
    25. }
    26. if ($_POST) {
    27.     $bbb = true;
    28.    
    29.     $fff = "";
    30.     foreach ( $_POST as $key => $value )
    31.         $fff .= "&".rawurlencode($key)."=".rawurlencode($value);
    32.     $fff = substr( $fff, 1 );
    33.  
    34. }
    35. if (isset($_COOKIE['raphaelsession'])) {
    36.     $setcookies = htmlspecialchars($_COOKIE['raphaelsession']);
    37.     $setcookies = mysql_escape_string($setcookies);
    38.     setcookie("raphaelsession", $setcookies, time()+3600);
    39.    
    40.     $ccc = true;
    41.     $eee = "";
    42.     foreach ( $_GET as $key => $value )
    43.         $eee .= "; ".rawurlencode($key)."=".rawurlencode($value);
    44.     $eee = substr( $eee, 2 );
    45. }else{
    46.     $setcookies = rand(1,999999).".".date('l-jS-of-F-Y-h-i-s-A');
    47.     $setcookies = htmlspecialchars($setcookies);
    48.     $setcookies = mysql_escape_string($setcookies);
    49.     setcookie("raphaelsession", $setcookies, time()+3600);
    50. }
    51.  
    52. //авторизаци¤
    53. $otvet = zaprosik($aaa,$bbb,$ccc,$ddd,$eee,$fff,$ggg,$setcookies);
    54.  
    55. //print_r($otvet);
    56. //exit('');
    57. foreach ($otvet['header'] as &$valueotvet) {
    58.    if(strpos($valueotvet, "Set-Cookie") > 1) header($valueotvet);
    59.    if(strpos($valueotvet, "Type") > 1) header($valueotvet);
    60.    if(strpos($valueotvet, "Location") > 1) header($valueotvet);
    61.    if(strpos($valueotvet, "Modified") > 1) header($valueotvet);
    62.    if(strpos($valueotvet, "Cache") > 1) header($valueotvet);
    63.    //if(strpos($valueotvet, "Content-Type") > 1) header($valueotvet);
    64.    //if(strpos($valueotvet, "Content-Type") > 1) header($valueotvet);
    65.    //if(strpos($valueotvet, "Content-Type") > 1) header($valueotvet);
    66. }
    67. unset($valueotvet);
    68. print ($otvet['body']);
    69.  
    70. function zaprosik($aa,$bb,$cc,$dd,$ee,$ff,$gg,$ii)
    71. {
    72.    
    73.     $ch = curl_init();
    74.     curl_setopt ($ch, CURLOPT_URL, "https://SITE111.ru".$aa.$gg);
    75.     if ($bb == true) curl_setopt ($ch, CURLOPT_POST, 1);
    76.     if ($bb == true) curl_setopt ($ch, CURLOPT_POSTFIELDS, $ff);
    77.     curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
    78.     curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, FALSE);
    79.     if ($dd == true) curl_setopt ($ch, CURLOPT_HEADER, TRUE);
    80.     if ($cc == true) curl_setopt ($ch, CURLOPT_COOKIE, $ee);
    81.     curl_setopt ($ch, CURLOPT_BINARYTRANSFER, TRUE);
    82.     if ($cc == true) curl_setopt ($ch, CURLOPT_COOKIEFILE, "tmp/login".$ii);
    83.     if ($cc == true) curl_setopt ($ch, CURLOPT_COOKIEJAR, "tmp/login".$ii);
    84.     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    85.     $return  = curl_exec ($ch);
    86.    
    87.         $curl_info = curl_getinfo($ch);
    88.        
    89.     curl_close($ch);
    90.    
    91.         $header_size = $curl_info['header_size'];
    92.         $header = explode("\r\n", substr($return, 0, $header_size));
    93.         $header = array_diff($header, array('')); // удаляем пустые строки из массива заголовка
    94.         $body = substr($return, $header_size);
    95.         $body = str_replace("SITE111.ru", "SITE222.ru", $body);
    96.         //if ($bb == true) $header = implode(",", $header);
    97.         //if ($bb == true) $body = $header.$body;
    98.        
    99.         //$return = str_replace("SITE111.ru", "SITE222.ru", $body);
    100.         //$return = $header;
    101.  
    102.             $return = array(
    103.             'header' => $header,
    104.             'body'    => $body);
    105.         if ($cc == true) return $return;
    106.        
    107. }
    108.  
    109. ?>

    Бюджет 3 т.р.
     
  2. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    не проще взять готовое решение
     
    denis01 нравится это.
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хм...еще один самописный анонимайзер?
     
    denis01 нравится это.
  4. BlackBoys

    BlackBoys Активный пользователь

    С нами с:
    30 дек 2008
    Сообщения:
    4
    Симпатии:
    0
    есть готовый корпоративный сайт, изменять его нет возможности, наш ретранслятор будет доп авторизацию производить и парочку новых функций добавит.

    Если имеете в виду готовое решение которые есть в сети, они не работают для моего сайта.

    На моем сайте ипользуются всякие такие заголовки
    x-csrftoken: g9PCIjnQWy3wmPZ7XH4FeA3kisR5zr6O
    x-requested-with: XMLHttpRequest
    из-за чего срабатывает защита и не дает авторизоваться на удаленном сайте.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Кто вам мешает где-нибудь в готовом решении открыть в любом месте буфер вывода, скинуть туда заголовки и закрыть его? В итоге они гарантированно будут в запросе.
    Корпоративные костыли...эхехе.. Неблагодатно. Автор, крепись, это будет нелегко. Еще небось совместимость с IE6 заставят делать.