2012-08-16 3 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"와 문자열을 일치 시키려고했습니다.콘텐츠의 마지막 청크 만 반환됩니다.

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

그러나, 전체 파일은 64,612 바이트 (web-sniffer.net에 의한 결과)입니다 :

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

결과는 다음과 같습니다 : I 콘텐츠를 얻을 수있는 기능을 사용합니다. 그리고 64612 = 1024 * 63 + 812입니다. 즉, 파일의 마지막 812 바이트 만 가져옵니다.

왜 이런 일이 발생할 수 있습니까? 전체 콘텐츠를 가져 오는 방법에 대한 아이디어가 있습니까? 감사.

피. 스. 나는 또한 sth를 시도했다. 아래와 같이 도움이되지 않습니다.

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); 
관련 문제