2012-08-16 59 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); 
相關問題