Написал простенький код который используя curl по https получает страницу из удаленного сайта и отображает пользователю. Скрипт полностью должен ретранслировать удаленный сайт (в том числе кукисы и все остальное). В моем коде все работает, по ссылкам ходит, куки передает, но формы на сайте не отправляются, авторизоваться не получается. Нужно сделать так чтобы авторизация происходила, формы работали, т.е. весь сайт работал полностью. Необходимо доработать мой код. Спойлер: Исходник PHP: <? // Делаем запрос //$aa - Путь запроса //$bb - Имеетс¤ ли POST запрос или нет 1 -да 2- нет //$ff - Содержимое POST запроса //$cc - Имеютс¤ ли укисы ли вывести ответ? 1 -да 2- нет //$ee - содержимое кукисов //$dd - Включить ли в ответ заголовок? 1 -да 2- нет //$gg - Содержимое GET запроса //$ii - Сессия $aaa = $_SERVER['REQUEST_URI']; // путь запроса грабим из htaccess $ddd = true; // Включаем заголовок if ($_GET) { $ggg = "?"; //$ggg = ""; foreach ( $_GET as $key => $value ) $ggg .= "&".rawurlencode($key)."=".rawurlencode($value); $ggg = substr( $ggg, 1 ); } if ($_POST) { $bbb = true; $fff = ""; foreach ( $_POST as $key => $value ) $fff .= "&".rawurlencode($key)."=".rawurlencode($value); $fff = substr( $fff, 1 ); } if (isset($_COOKIE['raphaelsession'])) { $setcookies = htmlspecialchars($_COOKIE['raphaelsession']); $setcookies = mysql_escape_string($setcookies); setcookie("raphaelsession", $setcookies, time()+3600); $ccc = true; $eee = ""; foreach ( $_GET as $key => $value ) $eee .= "; ".rawurlencode($key)."=".rawurlencode($value); $eee = substr( $eee, 2 ); }else{ $setcookies = rand(1,999999).".".date('l-jS-of-F-Y-h-i-s-A'); $setcookies = htmlspecialchars($setcookies); $setcookies = mysql_escape_string($setcookies); setcookie("raphaelsession", $setcookies, time()+3600); } //авторизаци¤ $otvet = zaprosik($aaa,$bbb,$ccc,$ddd,$eee,$fff,$ggg,$setcookies); //print_r($otvet); //exit(''); foreach ($otvet['header'] as &$valueotvet) { if(strpos($valueotvet, "Set-Cookie") > 1) header($valueotvet); if(strpos($valueotvet, "Type") > 1) header($valueotvet); if(strpos($valueotvet, "Location") > 1) header($valueotvet); if(strpos($valueotvet, "Modified") > 1) header($valueotvet); if(strpos($valueotvet, "Cache") > 1) header($valueotvet); //if(strpos($valueotvet, "Content-Type") > 1) header($valueotvet); //if(strpos($valueotvet, "Content-Type") > 1) header($valueotvet); //if(strpos($valueotvet, "Content-Type") > 1) header($valueotvet); } unset($valueotvet); print ($otvet['body']); function zaprosik($aa,$bb,$cc,$dd,$ee,$ff,$gg,$ii) { $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "https://SITE111.ru".$aa.$gg); if ($bb == true) curl_setopt ($ch, CURLOPT_POST, 1); if ($bb == true) curl_setopt ($ch, CURLOPT_POSTFIELDS, $ff); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, FALSE); if ($dd == true) curl_setopt ($ch, CURLOPT_HEADER, TRUE); if ($cc == true) curl_setopt ($ch, CURLOPT_COOKIE, $ee); curl_setopt ($ch, CURLOPT_BINARYTRANSFER, TRUE); if ($cc == true) curl_setopt ($ch, CURLOPT_COOKIEFILE, "tmp/login".$ii); if ($cc == true) curl_setopt ($ch, CURLOPT_COOKIEJAR, "tmp/login".$ii); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $return = curl_exec ($ch); $curl_info = curl_getinfo($ch); curl_close($ch); $header_size = $curl_info['header_size']; $header = explode("\r\n", substr($return, 0, $header_size)); $header = array_diff($header, array('')); // удаляем пустые строки из массива заголовка $body = substr($return, $header_size); $body = str_replace("SITE111.ru", "SITE222.ru", $body); //if ($bb == true) $header = implode(",", $header); //if ($bb == true) $body = $header.$body; //$return = str_replace("SITE111.ru", "SITE222.ru", $body); //$return = $header; $return = array( 'header' => $header, 'body' => $body); if ($cc == true) return $return; } ?> Бюджет 3 т.р.
есть готовый корпоративный сайт, изменять его нет возможности, наш ретранслятор будет доп авторизацию производить и парочку новых функций добавит. Если имеете в виду готовое решение которые есть в сети, они не работают для моего сайта. На моем сайте ипользуются всякие такие заголовки x-csrftoken: g9PCIjnQWy3wmPZ7XH4FeA3kisR5zr6O x-requested-with: XMLHttpRequest из-за чего срабатывает защита и не дает авторизоваться на удаленном сайте.
Кто вам мешает где-нибудь в готовом решении открыть в любом месте буфер вывода, скинуть туда заголовки и закрыть его? В итоге они гарантированно будут в запросе. Корпоративные костыли...эхехе.. Неблагодатно. Автор, крепись, это будет нелегко. Еще небось совместимость с IE6 заставят делать.