如何在发送请求和将响应存储在数组中的循环中使用curl 100次?
例如:当curl第一次使用in循环并获得500条记录并存储在一个数组中时,再次与第二个循环使用相同的过程并获得500条记录响应形式并存储在同一数组中而没有任何问题。最后,我需要在阵列中存储50K条记录,并将其用于数据库中的插入记录。
我最近两天都在工作,但没有得到任何解决方案,因此请帮助我。
<?php
$final_data = array();
for($d=1;$d<=100;$d++)
{
$data = '{"request": {"header": {"username": "xxx","password": "xxx"},
"body": {
"shapes": [],
"size_to": "",
"size_from": "",
"color_from": "",
"color_to": "",
"clarity_from": "",
"clarity_to": "",
"cut_from": "",
"cut_to": "",
"polish_from": "",
"polish_to": "",
"symmetry_from": "",
"symmetry_to": "",
"labs": [],
"price_total_from": "",
"price_total_to": "",
"page_number": "1",
"page_size": "50",
"sort_by": "price",
"sort_direction": "ASC"
}}}';
$json = json_decode($data,true);
$json['request']['body']['page_number'] = $d;
$data = json_encode($json);
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_URL, 'http://technet.rapaport.com/HTTP/JSON/RetailFeed/GetDiamonds.aspx');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$dd = json_decode($result,true);
foreach($dd['response']['body']['diamonds'] as $key)
{
array_push($final_data,$key);
}
curl_close($curl);
}
?>
Run Code Online (Sandbox Code Playgroud)
您可以使用curl_multi,在执行多个请求时效率更高。
$mh = curl_multi_init();
$handles = array();
for($i = 0 ; $i < 100 ; $i++){
$ch = curl_init();
$handles[] = $ch;
curl_setopt($ch, CURLOPT_URL, 'http://technet.rapaport.com/HTTP/JSON/RetailFeed/GetDiamonds.aspx');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh,$ch);
}
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running);
foreach($handles as $ch){
$result = curl_multi_getcontent($ch);
$dd = json_decode($result,true);
foreach($dd['response']['body']['diamonds'] as $key){
array_push($final_data,$key);
}
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
Run Code Online (Sandbox Code Playgroud)