2016-08-04 2 views
0

나는 문제가 무엇인지 알아 내려고 미쳤어 보이지만 찾을 수가 없다.임의의 프록시가있는 컬

$proxies = loadProxies(5); 

function getData($proxylist) 
{ 
    $rand_proxy = rand(0,count($proxylist)-1); 
    $url = 'http://www.stackoverflow.com'; //just for example 
    $agent = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Chrome/4.0.233.0 Safari/532.4"; 
    $referer = "http://www.google.com/"; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_REFERER, $referer); 
    curl_setopt($ch, CURLOPT_PROXY, $proxylist[$rand_proxy]); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    echo $data; 
} 

getData($proxies); 

그것은 어레이로부터 임의의 IP 프록시를 페치하고 컬 요청에서 사용한다. 내가 얻는 모든 데이터는 빈 페이지입니다. 경우에 따라 결과가 전혀없는 무한한 페이지로드가 발생합니다. 이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까? 감사.

답변

0

어쩌면 문제가 귀하의 loadProxies (5) 반환과 함께 무엇입니까? 기분이야이 코드는 지금 잘 여기 작동 : 기본적으로 컬이 표준 출력에 응답 본문을 출력하기 때문에

<?php 
$proxies = array('86.188.142.244:8080'); // random public http proxy 

function getData($proxylist) 
{ 
    $rand_proxy = rand(0,count($proxylist)-1); 
    $url = 'http://www.stackoverflow.com'; //just for example 
    $agent = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Chrome/4.0.233.0 Safari/532.4"; 
    $referer = "http://www.google.com/"; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_REFERER, $referer); 
    curl_setopt($ch, CURLOPT_PROXY, $proxylist[$rand_proxy]); 
    $data = curl_exec($ch); 
    if($data!==true){$ex=new RuntimeException('curl_exec error. errno: '.curl_errno($ch).' error: '.curl_error($ch));@curl_close($ch);throw $ex;} 
    curl_close($ch); 
    //echo $data; 
} 

getData($proxies); 

또한, $ 데이터는, 컬의 리턴 코드가 아닌 데이터를 반환합니다. CURLOPT_RETURNTRANSFER를 설정하면 본문이 반환됩니다. (다른 것으로 리디렉션하려면 CURLOPT_FILE을 사용하십시오)

+0

'$ proxylist = loadProxies (2); (34) "47.88.104.219:80"[1] => 문자열 (36) "14.161.21.170:8080"}'그래서 {{0} => 맞아요. _CURLOPT_PROXY_에 수동으로 입력하면 작동하지만 변수가 아닌 경우 작동합니다. – Nedas