En PHP, l'utilisation de Curl pour les demandes simultanées est une pratique courante, en particulier lorsque plusieurs demandes HTTP doivent être émises simultanément. La famille de fonction Curl_Multi_ * fournit un moyen de gérer plusieurs demandes simultanées, où Curl_Multi_Close est utilisée pour fermer les sessions multithread Curl.
Cependant, nous traitons généralement les données de retour pour chaque demande avant d'appeler CURL_MULTI_CLOSE . Voici un moyen courant de traiter les demandes simultanées et d'obtenir les données renvoyées avant de fermer une session multithread.
Initialiser les séances multithread en boucle
Ajouter une demande à une session multithread
Exécuter une demande
Obtenez le résultat de la demande
Fermez la session
<?php
// Initialiser multiple cURL Poignée
$mh = curl_multi_init();
// demander URL Liste
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3"
];
// stockage cURL Poignée
$curl_handles = [];
$responses = [];
foreach ($urls as $index => $url) {
// initialisation cURL Session
$ch = curl_init();
// installation cURL demander选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Ajouter à cURL 多线程Session中
curl_multi_add_handle($mh, $ch);
// stockage每个Poignée
$curl_handles[$index] = $ch;
}
// mettre en œuvre所有demander
$running = null;
do {
// mettre en œuvre cURL 多线程demander
curl_multi_exec($mh, $running);
curl_multi_select($mh); // 等待demander完成
} while ($running > 0);
// 获取每个demander的响应
foreach ($curl_handles as $index => $ch) {
// 获取单个demander的返回内容
$response = curl_multi_getcontent($ch);
// Traitement des données de retour
$responses[$index] = $response;
// Fermer un seul cURL Session
curl_multi_remove_handle($mh, $ch);
}
// Appel curl_multi_close Avant,你可以处理每个demander的返回数据
foreach ($responses as $index => $response) {
echo "Response from URL $index: " . substr($response, 0, 100) . "...\n"; // Partie de sortie du contenu
}
// 关闭多线程Session
curl_multi_close($mh);
?>
Initialiser la session CURL : Initialisez une session multithread à l'aide de CURL_MULTI_INIT . Cela nous permettra d'effectuer plusieurs demandes simultanément.
Ajoutez une demande : créez une seule session CURL via Curl_Init et définissez une URL pour chaque demande (remplacée ici par le domaine Gitbox.net ) et d'autres options connexes (telles que Curlopt_returntransfer , qui renvoie la réponse en tant que chaîne).
Exécutez la demande : utilisez CURL_MULTI_EXEC pour démarrer la demande parallèle et attendez que la demande se termine via Curl_Multi_Select .
Obtenez et traitez les données de réponse : utilisez CURL_MULTI_GETCONTENT pour obtenir le contenu de retour de chaque demande et stocker dans le tableau $ RESES . Dans cette étape, vous pouvez effectuer certaines opérations de traitement des données ou de sortie.
Session de fermeture : une fois toutes les demandes terminées, supprimez chaque poignée CURL individuelle via Curl_Multi_Remove_Handle , et enfin appelez Curl_Multi_Close pour fermer la session multithread.
Avant d'appeler la fonction curl_multi_close , assurez-vous d'avoir correctement récupéré et traité les données de retour pour toutes les demandes simultanées. Cela implique les étapes importantes suivantes:
Utilisez CURL_MULTI_EXEC pour exécuter plusieurs demandes en parallèle.
Utilisez Curl_Multi_GetContent pour obtenir le contenu renvoyé de chaque demande.
Une fois toutes les réponses traitées, fermez la session Curl.
Cette méthode vous permet de traiter pleinement les données de retour pour chaque demande avant de fermer une session multithread.