[英]PHP cURL With a Loop
我正在嘗試集成一個Web服務,其中JSON響應返回下一個1,000個結果的URL。 我要做的是循環cURL以繼續處理請求,直到“ next”變量為空。
我遇到了問題,因為一旦看到變量返回,就無法循環備份。
$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
}
但是我不能每次都重置$ next變量。 有人有什么想法嗎?
為什么不
$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;
}
}
我喜歡遞歸函數方法:
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, []);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.