Я ищу самый быстрый и простой способ проксирования страницы в PHP. Я не хочу, чтобы пользователь перенаправлялся, я просто хочу, чтобы мой скрипт возвращал один и тот же контент, код ответа и заголовки в качестве другого удаленного URL-адреса.
echo file_get_contents('proxypage');
Будет ли это работать?
РЕДАКТИРОВАТЬ:
Первый ответ был немного коротким, и я не думаю, что он будет обрабатывать заголовки, как вам хотелось бы.
Однако вы также можете это сделать:
function get_proxy_site_page( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => true, // return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect CURLOPT_TIMEOUT => 120, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $remoteSite = curl_exec( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['content'] = $remoteSite; return $header; }
Это вернет вам массив, содержащий большую информацию на удаленной странице. $header['content']
будет содержать как контент веб-сайта, так и заголовки, $header[header_size]
будет содержать длину этого заголовка, чтобы вы могли использовать substr
для их разделения.
Тогда это просто вопрос использования echo
и header
для прокси-страницы.
Вы можете использовать функции PHP cURL для достижения этой функциональности:
// create a new cURL resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // grab URL and pass it to the browser $urlContent = curl_exec($ch);
С этого момента вы получите информацию заголовка ответа, используя http://www.php.net/curl-getinfo . (Есть несколько значений, которые вы можете захватить, все перечисленные в документации).
// Check if any error occured if(!curl_errno($ch)) { $info = curl_getinfo($ch); header('Content-type: '.$info['content_type']); echo $urlContent; }
Обязательно закройте ручку cURL.
// close cURL resource, and free up system resources curl_close($ch);
Вы можете получить html следующей страницы с завитком, а затем повторить ответ.