Я хотел бы очистить содержимое этой страницы результатов поиска Google с помощью curl. Я пытаюсь настроить различные пользовательские агенты и установить другие параметры, но я просто не могу получить содержимое этой страницы, так как часто меняю перенаправление или я получаю сообщение об ошибке страницы.
Я считаю, что это связано с тем, что строка запроса закодирована где-то, но я действительно не знаю, как обойти это.
//$url is the same as the link above $ch = curl_init(); $user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0' curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,120); curl_setopt ($ch,CURLOPT_TIMEOUT,120); curl_setopt ($ch,CURLOPT_MAXREDIRS,10); curl_setopt ($ch,CURLOPT_COOKIEFILE,"cookie.txt"); curl_setopt ($ch,CURLOPT_COOKIEJAR,"cookie.txt"); echo curl_exec ($ch);
Что мне нужно сделать, чтобы мой PHP-код отображал точный контент страницы, как я бы увидел его в моем браузере? Что мне не хватает? Может ли кто-нибудь указать мне правильное направление?
Я видел подобные вопросы на SO, но ни один из них не мог ответить мне.
РЕДАКТИРОВАТЬ:
Я попытался просто открыть ссылку с помощью Selenium WebDriver, которая дает те же результаты, что и cURL. Я все еще думаю, что это связано с тем, что в строке запроса есть специальные символы, которые где-то запутываются.
вот как:
/** * Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an * array containing the HTTP server response header fields and content. */ function get_web_page( $url ) { $user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0'; $options = array( CURLOPT_CUSTOMREQUEST =>"GET", //set request type post or get CURLOPT_POST =>false, //set to GET CURLOPT_USERAGENT => $user_agent, //set user agent CURLOPT_COOKIEFILE =>"cookie.txt", //set cookie file CURLOPT_COOKIEJAR =>"cookie.txt", //set cookie jar CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don't 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 ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; }
пример
//Read a web page and check for errors: $result = get_web_page( $url ); if ( $result['errno'] != 0 ) ... error: bad url, timeout, redirect loop ... if ( $result['http_code'] != 200 ) ... error: no page, no permissions, no service ... $page = $result['content'];
Для реалистичного подхода, который эмулирует наиболее человеческое поведение, вы можете добавить референта в свои варианты завивки. Вы также можете добавить следующую строку в свои параметры завивки. Поверьте мне, кто бы ни сказал, что результаты CURLING Google невозможны, это полный болван, и он должен бросить свой компьютер на стену в надежде никогда больше не вернуться в интернет. Все, что вы можете сделать «IRL» с вашим собственным браузером, можно эмулировать с помощью PHP cURL или libCURL в Python. Вам просто нужно сделать больше cURLS, чтобы получить бафф. Тогда вы увидите, что я имею в виду. 🙂
$url = "http://www.google.com/search?q=".$strSearch."&hl=en&start=0&sa=N"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); curl_setopt($ch, CURLOPT_URL, urlencode($url)); $response = curl_exec($ch); curl_close($ch);
Попробуй это:
$url = "http://www.google.com/search?q=".$strSearch."&hl=en&start=0&sa=N"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); curl_setopt($ch, CURLOPT_URL, urlencode($url)); $response = curl_exec($ch); curl_close($ch);
Я полагаю, что вы заметили, что ваша ссылка на самом деле является ссылкой HTTPS …. Кажется, что параметры CURL не включают в себя какую-либо обработку SSH … возможно, это может быть вашей проблемой. Почему бы вам не попробовать ссылку, отличную от HTTPS, чтобы узнать, что происходит (например, Google Custom Search Engine) …?
Получить контент с помощью Curl php
запросить поддержку сервера Функция Curl, включить в httpd.conf в папке Apache
function UrlOpener($url) global $output; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); echo $output;
Если вы получаете контент в кеше google, используйте Curl, вы можете использовать этот URL: http://webcache.googleusercontent.com/search?q=cache:Put your url Пример: http://urlopener.mixaz.net/