php用curl 如何并发请求
时间: 2023-12-16 17:21:09 浏览: 29
Hello!请放心,我不会透露任何关于您的信息。
关于您的问题,可以使用PHP的curl_multi_init函数以及相关函数来实现并发请求。具体步骤如下:
1. 初始化一个curl多个句柄:curl_multi_init。
2. 循环添加每个要请求的curl句柄:curl_multi_add_handle。
3. 执行curl句柄并等待请求完成:curl_multi_exec。
4. 使用curl_multi_select等待io事件准备就绪。
5. 获取请求结果:curl_multi_getcontent。
下面是一个简单的示例代码:
```
$urls = array(
'http://www.example.com/api/endpoint1',
'http://www.example.com/api/endpoint2',
'http://www.example.com/api/endpoint3',
);
$handles = array();
$results = array();
// 初始化curl多个句柄
$multi_handle = curl_multi_init();
// 循环添加每个要请求的curl句柄
foreach ($urls as $url) {
$handle = curl_init($url);
curl_setopt_array($handle, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
));
curl_multi_add_handle($multi_handle, $handle);
$handles[] = $handle;
}
// 执行curl句柄并等待请求完成
do {
$status = curl_multi_exec($multi_handle, $running);
} while ($status === CURLM_CALL_MULTI_PERFORM || $running);
// 使用curl_multi_select等待io事件准备就绪
if ($status !== CURLM_OK) {
die("Error: " . curl_multi_strerror($status));
}
do {
$status = curl_multi_select($multi_handle, 1);
if ($status === -1) {
usleep(10);
}
// 获取请求结果
while ($info = curl_multi_info_read($multi_handle)) {
$handle = $info['handle'];
$content = curl_multi_getcontent($handle);
$results[] = $content;
curl_multi_remove_handle($multi_handle, $handle);
curl_close($handle);
}
} while ($status === -1 || !empty($handles));
curl_multi_close($multi_handle);
// 输出结果
print_r($results);
```
希望这个回答对您有帮助!如果您有其它问题,请随时提出。