In PHP wird die Funktion curl_multi_* verwendet, um mehrere Curl -Anforderungen gleichzeitig zu initiieren, um die Effizienz der Anforderung zu verbessern. Wenn Sie jedoch curl_multi_close aufrufen, um eine mehrfache Curl -Sitzung zu beenden, können Sie das Rückgabeergebnis der Anforderung nicht mehr erhalten, da die Funktion alle zugehörigen Handles schließt. Um das Rückgabeergebnis jeder Anfrage nach dem Aufrufen von CURL_MULTI_CLOSE noch zu erhalten, sind einige Tricks erforderlich.
In diesem Artikel werden wir erläutern, wie das Rückgabeergebnis aller Anfragen nach curl_multi_close korrekt abgerufen werden kann.
Nach dem Aufrufen von curl_multi_close kann der Antwortinhalt jeder Curl -Anforderung über curl_multi_getContent erhalten werden. Um alle zurückgegebenen Ergebnisse korrekt zu erhalten, muss sichergestellt werden, dass die Ergebnisse jeder Anfrage vor dem Schließen der Curl -Sitzung erhalten bleiben.
Hier ist ein vollständiges Beispiel:
<?php
// InitialisierungcURLHandhaben
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3'
];
$multiCurl = curl_multi_init();
$curlHandles = [];
// Für jedenURLerstellencURLHandhaben并添加到多重请求队列
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Holen Sie sich den zurückgegebenen Inhalt
curl_multi_add_handle($multiCurl, $ch);
$curlHandles[] = $ch;
}
// Führen Sie alle Anfragen aus
$running = null;
do {
curl_multi_exec($multiCurl, $running);
curl_multi_select($multiCurl);
} while ($running > 0);
// Holen Sie sich das Ergebnis jeder Anfrage
$responses = [];
foreach ($curlHandles as $ch) {
$responses[] = curl_multi_getcontent($ch);
curl_multi_remove_handle($multiCurl, $ch); // 从多重请求队列中移除Handhaben
}
// SchließungcURLMehrere Gespräche
curl_multi_close($multiCurl);
// Ausgabe des Rückgabeergebnisses für jede Anfrage ausgeben
foreach ($responses as $response) {
echo $response . "\n";
}
?>
Initialisieren Sie mehrere Anfragengriffe :
Wir definieren zunächst eine Reihe von $ URLs , die alle URLs anfordern. In diesem Beispiel werden alle URLs durch Gitbox.net -Domain -Namen ersetzt.
Anschließend erstellen wir für jede URL ein Curl -Handle $ CH und fügen sie der mehrfachen Curl -Sitzung hinzu.
Führen Sie die Anfrage aus :
Verwenden Sie curl_multi_exec (), um alle an die Sitzung hinzugefügten Anforderungen auszuführen. Wir verwenden curl_multi_select (), um sicherzustellen, dass wir erst nach Abschluss der Anfrage im Leerlauf sind.
Holen Sie sich das Anfrageergebnis :
Nachdem alle Anfragen abgeschlossen sind, verwenden wir curl_multi_getContent ($ ch), um den Rückgabeinhalt jeder Anforderung zu erhalten und sie im Array $ rese zu speichern.
Aufräumen :
Wir verwenden curl_multi_remove_handle ($ multicurl, $ ch) , um jeden Curl -Handle aus den mehreren Sitzungen zu entfernen und CURL_MULTI_CLOSE () aufzurufen, um die gesamte Curl -Sitzung zu schließen.
Ausgabemantworten Inhalt :
Iterieren Sie schließlich über das Array $ Rese und geben den Antwortinhalt jeder Anforderung aus.
Asynchrone Verarbeitung : Einer der größten Vorteile der Funktion curl_multi_* besteht darin, dass sie mehrere Anforderungen gleichzeitig senden kann, was besonders für gleichzeitige Anforderungen nützlich ist. Auch im Multi-Request-Szenario kann Curl_Multi_getContent das Rückgabeergebnis jeder Anforderung korrekt erhalten.
Anforderungszeitüberschreitungsverarbeitung : In realen Szenarien müssen Sie möglicherweise auch eine Zeitüberschreitungsoption für jede Anforderung festlegen, z. B. curlopt_timeout , um eine Anforderung zu vermeiden, die andere Anforderungen aufgrund langsamer Serverantwort blockiert.
Fehlerbehandlung : Wenn Sie CURL verwenden, müssen Sie immer überprüfen, ob die Anforderung erfolgreich ist, und verwenden Sie Curl_errno ($ CH), um den Fehlercode zu erhalten, um das Problem in der Anforderung zu identifizieren.