2016-11-18 73 views
2

我正在嘗試集成一個Web服務,其中JSON響應返回下一個1,000結果的URL。我必須做的是循環cURL繼續處理請求,直到「下一個」變量爲空。帶循環的PHP cURL

我遇到了一個問題,因爲我無法循環備份一次,我看到變量返回。

$url = "https://xxxxxxxxxxxxxx.com/process/api/transactions/from/$yesterday/to/$today/for/company/21?offset=0&limit=1000"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);                
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: $cookie")); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);                                    

$result = curl_exec($ch); 

file_put_contents(rj_array, $result, FILE_APPEND); 

$server = file_get_contents(rj_array); 

$json_result = json_decode($server, true); 

$next = $json_result['next']; 

我的想法做類似的:

while(!empty($next)){ 
//Do the curl request again with the new URL $next 
} 

但我不能每次都重新設置$下一個變量。有沒有人有任何想法?

+0

怎麼樣'做while'循環?我相信這將完全符合你的要求。 – McStuffins

回答

2

爲什麼不

$base_url = "https://xxxxxxxxxxxxxx.com/process/api/transactions/from/$yesterday/to/$today/for/company/21?limit=1000"; 
$next = 0; 
while($next !== false) { 
    $url = $base_url . "&offset=" . $next; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url);                
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: $cookie")); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);                                    

    $result = curl_exec($ch); 

    file_put_contents(rj_array, $result, FILE_APPEND); 

    $server = file_get_contents(rj_array); 

    $json_result = json_decode($server, true); 

    $next = $json_result['next']; 
    if(/*test if next is empty*/) { 
     $next = false; 
    } 
} 
1

我喜歡的遞歸函數的方法:

function crawler($url, $return) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: $cookie")); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

    $result = curl_exec($ch); 

    file_put_contents(rj_array, $result, FILE_APPEND); 

    $server = file_get_contents(rj_array); 

    $json_result = json_decode($server, true); 
    $return[$url] = $json_result; //set your return information in some array 

    $next = $json_result['next']; 

    if(!empty($next)) { 
     return crawler($next, $return); //call again same function with next url and array of data that you would use later 
    } 

    return $return; 
} 

$url = "https://xxxxxxxxxxxxxx.com/process/api/transactions/from/$yesterday/to/$today/for/company/21?offset=0&limit=1000"; 
$allJsonResults = crawler($url, []); 
+0

返回: –

+0

Array([https://xxxxxxxxxxxxxx.com/process/api/transactions/from/2016-11-17/to/2016-11-18/for/company/21?offset=0&limit=1000 ] =>) –