2012-08-16 60 views
0
function curl_get($url){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
     $data = curl_exec($ch); 

     print_r(curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD)); 

     curl_close($ch); 
     return $data; 
} 

我试图匹配一个字符串与此页面“wikipedia.sfstate.us/Scarves”。我用函数来获取内容:只返回最后一个内容块

$url = "http://wikipedia.sfstate.us/Scarves"; 
$html = curl_get($url); 
var_dump($html); 

结果看起来是这样的:

812 //CURLINFO_SIZE_DOWNLOAD 
string(812) "..." //$html string where the content is stored 

然而,整个文件是64612个字节(由web-sniffer.net结果)。和64612 = 1024 * 63 + 812.也就是说,我只得到文件的最后812个字节。

为什么会发生这种情况?关于如何获取整个内容的任何想法?谢谢。

P.S .:我也试过。如下但不起作用

if(strlen($html) < 1024){ 
    $html = ''; 
    $i = 0; 
    while($content = file_get_contents($url, FILE_TEXT, NULL, $i, $i + 1023)){ 
      $html .= $content; 
      $i += 1023; 
    } 
} 

回答

0

您试图抓取的页面具有基于用户代理的保护。添加适当的用户代理你的要求和它的作品:

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1"); 

当然,如果他们有这样的保护,这可能是因为他们不想让你刮他们的内容。

0

试试这个,这是我的测试代码,它工作正常

输出: - enter image description here

<?php 

function curl_get($url){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1"); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
     $data = curl_exec($ch); 

     print_r(curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD)); 

     curl_close($ch); 
     return $data; 
} 


$url = "http://wikipedia.sfstate.us/Scarves"; 
$html = curl_get($url); 
var_dump($html); 

也可以尝试另一个例子

$ch = curl_init("http://wikipedia.sfstate.us/Scarves"); 
$fp = fopen("example_htmlpage.html", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
相关问题