0
웹 사이트를 크롤링하기 위해 컬 스크립트를 실행하려고했지만 시간이 초과되었습니다. 로컬에서는 작동하지만이 서버에서는 작동하지 않습니다. 내가 아는 한 모든 것이 올바르게 설정됩니다.PHP curl crawl에 이상한 시간 초과가 발생했습니다.
참고이 코드 샘플에서는 사이트 전체 이름을 XXXXX (으)로 바꿨습니다.
[email protected]:~# wget http://xxxxx.eu
--2013-10-31 10:30:02-- http://xxxxx.eu/
Resolving xxxxxx.eu (xxxxxx.eu)... 31.7.58.171, 31.7.58.172, 31.7.58.170
Connecting to xxxxxx.eu (xxxxxx.eu)|31.7.58.171|:80...
아이디어 :
<?php
error_reporting(E_ALL);
$url = "http://xxxxx.eu/search?f=b" ;
$header = getHeaders(0);
$request = array();
$request['url'] = $url ;
$request['method'] = 'get' ;
$request['header'] = $header ;
echo getPageCURL($request);
die();
function getHeaders($content_length=0)
{
$header = array();
$header[] = "Host: xxxxx.eu";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "User-Agent: Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
if($content_length>10) $header[] = "Content Size: ".$content_length;
$header[] = "Content-Type: text/html; charset=utf-8";
$header[] = "Content-Encoding: gzip";
$header[] = "Vary: Accept-Encoding";
$header[] = "Content-Length: 22";
$header[] = "Connection: keep-alive";
return $header;
}
function getPageCURL($request)
{
$page = '';
$verified = '';
$page_type = 'O';
$filter = true;
$page_header = 0;
$followlocation = true;
$cookies = true;
$bad_url = false;
if(is_array($request))
{
foreach($request as $request_key=>$request_value)
$$request_key = $request_value;
}
else $url = $request;
if(empty($url)) return '';
$url = str_replace(' ', '+', $url);
//echo "\nCalling : ".$url;
for($i=1; $i<=10; $i++)
{
$curl = curl_init();
if(isset($header) && is_array($header))
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
if(isset($referer) && !empty($referer))
curl_setopt($curl, CURLOPT_REFERER, $referer);
if(isset($ssl))
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
if(isset($method) && $method=='post')
{
curl_setopt($curl, CURLOPT_POST, true);
if(isset($post_data) && $post_data!='')
{
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
}
}
if($cookies)
{
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
}
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($curl, CURLOPT_HEADER, $page_header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, $followlocation);
$page = curl_exec($curl);
if(($page===false || trim($page) == '' || empty($page)) && (curl_errno($curl) == 6 || curl_errno($curl) == 7))
{
curl_close ($curl);
//echo "\nNetwork problem...";
sleep(10);
$i--;
continue;
}
else if(curl_errno($curl) == 6)
{
file_put_contents('cu_failed-'.time().'.txt', $page, FILE_APPEND);
}
curl_close ($curl);
}
$page = str_replace(array("\n", "\r", "\t"), " ", $page);
return $page;
}
?>
난 그냥 해당 사이트에 기본 wget을 수행하려고하면
나는이 repsonse를 얻을? 나는 다른 사이트를 말리거나 wget 할 수 있지만이 일이 일어나지 않았습니까?
명령 프롬프트에 IP 주소로 핑 (ping)을 시도하십시오. 시간 초과 문제가 있는지 확인하십시오. – Shudmeyer
ping이 심각하게 나를 괴롭히는 경우 : – Fredrick
방화벽 문제가 서버 측에 있습니까? – Shudmeyer