Подтвердить что ты не робот

Как получить содержимое страницы с помощью cURL?

Я хотел бы очистить содержимое этой страницы результатов поиска 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, но ни один из них не мог ответить мне.

EDIT:

Я попытался просто открыть ссылку, используя Selenium WebDriver, которая дает те же результаты, что и cURL. Я все еще думаю, что это связано с тем, что в строке запроса есть специальные символы, которые запутываются где-то в этом процессе.

4b9b3361

Ответ 1

вот как:

   /**
     * 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'];

Ответ 2

Для реалистичного подхода, который эмулирует наиболее человеческое поведение, вы можете добавить референта в свои варианты завивки. Вы также можете добавить следующую строку в свои параметры завивки. Поверьте мне, кто бы ни сказал, что результаты 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);

Ответ 3

Попробуйте следующее:

$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);

Ответ 4

Я полагаю, что вы заметили, что ваша ссылка на самом деле является ссылкой HTTPS.... Кажется, что параметры CURL не включают в себя какую-либо обработку SSH... возможно, это может быть вашей проблемой. Почему бы вам не попробовать ссылку, отличную от HTTPS, чтобы узнать, что произойдет (например, Google Custom Search Engine)...?

Ответ 5

Получить контент с помощью 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 ваш URL-адрес Пример: http://urlopener.mixaz.net/