2016-08-04 13 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を取得して、cURLのリクエストでそれを使用する必要があります。私が得ているすべてのデータは空白のページです。場合によっては、無限のページ読み込みを行い、結果はまったくありません。これを引き起こしていると私はこれをどのように修正するのですか?ありがとう。

答えて

0

おそらく問題はあなたのloadProxies(5)が返ってきたことでしょうか?このコードは、今まさにここ正常に動作しますCUS:また

<?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); 

、$データをデフォルトでは、カールがstdoutにレスポンスボディを出力し、ためだけで、カールの戻りコードではなく、データを返します。 CURLOPT_RETURNTRANSFERを設定すると、本体が返されます。 (別のものにリダイレクトするには、CURLOPT_FILEを使用してください)

+0

'$ proxylist = loadProxies(2); (36) "14.161.21.170:8080"} 'so {0} => string(34)" 47.88.104.219:80 "[1] =>文字列(36)それは正しいです。 _CURLOPT_PROXY_に手動で入力すると機能しますが、変数の場合は機能しません。 – Nedas