我试图加载大约30,000个PHP URL。为了尽快完成这项任务,我试图使用curl_multi_init()。然而,它似乎一次加载所有30,000个URL,而我的理解是,除非CURLMOPT_MAXCONNECTS另有规定,否则它将一次处理10个URL。
我相信它试图一次加载所有30,000个URL,因为代码运行了大约8秒(下面设置的超时),然后为大多数URL返回空内容,就好像请求失败了一样。
代码在少量域(例如100个以下)中按预期运行。
我如何确保它一次只处理10个请求?
$mh = curl_multi_init();
$requests = [];
foreach ($urls as $i => $url) {
$requests[$i] = curl_init($url);
curl_setopt($requests[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($requests[$i], CURLOPT_TIMEOUT, 8);
curl_setopt($requests[$i], CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($requests[$i], CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($requests[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($requests[$i], CURLOPT_HEADER, false);
curl_setopt($requests[$i], CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($requests[$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36');
curl_multi_add_handle($mh, $requests[$i]);
}
$active = null;
do {
curl_multi_exec($mh, $active);
} while ($active);
$responses = [];
foreach ($requests as $request) {
$responses[] = curl_multi_getcontent($request);
curl_multi_remove_handle($mh, $request);
curl_close($request);
}
字符串
1条答案
按热度按时间qxgroojn1#
给予一个尝试,它把$urls分成100个元素数组,并为每组100个元素发送一个多请求。
字符串