2014-03-12 4 views
1

사이트의 일부 내용을 가져 오려고합니다. 따라서 PHP에서 file_get_contents 또는 curl 함수를 사용하고 있습니다. 그러나 문제는 이러한 기능이 모든 사이트에서 작동하지 않는다는 것입니다. 예 : google.com에서 일하고 있지만 iteye.com에서는 작동하지 않습니다. PHP : 일부 사이트에서는 file_get_contents 및 curl이 작동하지 않습니다.

$baseurl = 'http://www.iteye.com/'; 
$contents = file_get_contents($baseurl); 

//OR 
$ch = curl_init(); 
$timeout = 10; 
curl_setopt ($ch, CURLOPT_URL, $baseurl); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$list = curl_exec($ch); 

는이 사이트가 함수 (file_get_contents 또는 컬을) 차단 된 것 같아요, 그래서 어떻게 내가 iteye.com 같은 이러한 사이트에서 내용을 가져 계속할 수 있습니다 : 내 코드는 다음 좋아?

+0

당신은 포함하여에 "스푸핑"사용자 에이전트를해야 할 수도 있습니다 ; Windows NT 5.1, en-US, rv : 1.8.1.13) Gecko/20080311 Firefox/2.0.0.13 ');' –

+0

이 질문을 참조하십시오 : http://stackoverflow.com/questions/22314753/file-get-contents-http-request-failed/22314941 # 22314941 – Barmar

+0

www.iteye.com은 잘 작동합니다. – Barmar

답변

0
당신은 리디렉션을 수행하고, 또한 사용자 에이전트 변경 컬 지시해야 할 수도 있습니다

: 당신이 어떤 사이트를 가져하려는 경우

$ch = curl_init(); 
$timeout = 10; 
curl_setopt ($ch, CURLOPT_URL, $baseurl); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 

curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt ($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 

$list = curl_exec($ch); 
+0

http://ikeepstudying.com/services/justcoding.php 작동하지 않습니다 ... –

1

, 당신이 CURL

당신을 사용하는 것이 좋습니다를 다음에주의해야합니다.

  1. 예 : http 리디렉션 (301), (302)
  2. 사용자 에이전트
  3. HTTPS
  4. 때때로 참조 페이지는 또한 당신은 인간처럼 가능한 한 많이 행동해야한다

문제가 될 수 있습니다.

따라서 이러한 지침은 또한 당신의 코드에서 누락하지 않을 수`curl_setopt ($ ch를, CURLOPT_USERAGENT, '모질라/5.0 (윈도우, U를 :

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com'); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
관련 문제