2016-11-18 84 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 ] =>) –