如何使用cURL获取页面内容?

我想用curl来抓取这个Googlesearch结果页面的内容。 我一直在尝试设置不同的用户代理,并设置其他选项,但我似乎无法获得该页面的内容,因为我经常被redirect,或者我得到一个“页面移动”的错误。

我相信这是与查询string编码的事实有关,但我真的不知道如何解决这个问题。

//$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代码显示页面的确切内容,就像我在浏览器上看到的一样? 我错过了什么? 任何人都可以指出我正确的方向?

我已经看到类似的问题,但没有一个可以帮助我的答案。

编辑:

我试图用Selenium WebDriver打开链接,它的结果与cURL相同。 我仍然认为这与查询string中有特殊字符在过程中某处出现混乱的事实有关。

这是如何:

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

对于模仿最人性行为的现实方法,您可能需要在curl选项中添加引用者。 您可能还需要为curl选项添加一个follow_location。 相信我,谁说,结果谷歌的结果是不可能的,是一个完整的娃娃,应该把他/她的电脑靠墙,希望永远不会再回到internetz。 所有你可以用自己的浏览器做“IRL”的东西都可以用Python中的cURL或libCURL来模拟。 你只需要做更多的curl来获得buff。 那么你会明白我的意思。 🙂

  $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参数不包括任何types的SSH处理…也许这可能是你的问题。 为什么不尝试使用非HTTPS链接来查看会发生什么(例如Google自定义search引擎)…?

用Curl php获取内容

请求服务器支持Curlfunction,启用Apache中的httpd.conf文件

 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; 

如果通过谷歌caching使用curl获得内容,你可以使用这个url: http : //webcache.googleusercontent.com/search?q = cache: Put你的url示例: http : //urlopener.mixaz.net/