Aktueller Standort: Startseite> Neueste Artikel> CURL_MULTI_CLOSE, wie umgeleitete Antworten beim Schließen einer Anforderung umgeleitet werden

CURL_MULTI_CLOSE, wie umgeleitete Antworten beim Schließen einer Anforderung umgeleitet werden

gitbox 2025-05-12

Die Funktionen curl_multi_* sind bei der Verwendung von PHP -Curl -Erweiterungen für gleichzeitige Anforderungen sehr häufig. curl_multi_close () ist eine Funktion, mit der Ressourcen freigegeben und die Curl -Handlungssammlung geschlossen werden. Viele Entwickler können jedoch im Umgang mit Antworten einschließlich Umleitungen (z. B. 301, 302) verwirrt sein: und,

In diesem Artikel werden Sie von einer Prinzip und praktischen Perspektive korrekt von Curl_multi_close () verwendet, um beim Schließen einer Anfrage keine wichtigen Reaktionen zu verlieren.

Verstehen Sie die grundlegende Rolle von curl_multi_close

Zunächst müssen Sie verstehen, dass die Hauptfunktionen von curl_multi_close ($ multi_handle) :

  • Schließen Sie einen Multi -Handler

  • Geben Sie gleichzeitig alle zugehörigen Ressourcen frei

Wichtige Tipps :

  • curl_multi_close () ist nur für die Ressourcenreinigung verantwortlich und verarbeitet nicht automatisch Umleitungen .

  • Die Verarbeitung von Weiterleitungen muss während der Anforderungsausführungsphase abgeschlossen sein (z. B. Einstellungsoptionen vor curl_multi_exec () ).

  • Nach dem Schließen können Sie keine Anforderungsantwortdaten mehr erhalten, einschließlich Umleitungsinformationen.

Bevor Sie CURL_MULTI_CLOSE () anrufen, müssen Sie daher sicherstellen, dass alle Anfragen vollständig ausgeführt wurden und die erforderliche Antwort gelesen wurde.

Richtige Reaktionen korrekt behandeln

Um Curl dazu zu bringen, die Umleitung korrekt zu befolgen und die endgültige Antwort vor dem Schließen zu erhalten, sollten Sie dies tun:

  1. Legen Sie die Lockenoptionen ein , damit automatische Nachbeobachtungsleitungen.

  2. Führen Sie die Anforderung vollständig aus und rufen Sie alle erforderlichen Daten ab.

  3. Schließlich wird curl_multi_close () aufgerufen, um die Ressource zu veröffentlichen.

Beispielcode

 <?php
// Erstellen Sie einen Multi-Griff-Prozessor
$multiHandle = curl_multi_init();

// Initialisieren Sie eine separate cURL Sitzung
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/redirect-example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Ermöglichen Sie automatische Follow-up-Weiterleitungen
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // Folgen Sie höchstens5Umleitung

// 将Sitzung添加到多句柄处理器
curl_multi_add_handle($multiHandle, $ch);

// Eine Anfrage ausführen
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > 0) {
        echo "cURL Error: " . curl_multi_strerror($status);
    }
    // Warten auf eine aktive Verbindung
    curl_multi_select($multiHandle);
} while ($running > 0);

// Holen Sie sich Inhalte und Informationen vor dem Schließen
$response = curl_multi_getcontent($ch);
$info = curl_getinfo($ch);

// Antwortinhalt drucken
echo "Final URL: " . $info['url'] . PHP_EOL;
echo "HTTP Code: " . $info['http_code'] . PHP_EOL;
echo "Response Body: " . $response . PHP_EOL;

// Reinigung
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
curl_multi_close($multiHandle);
?>

Schlüsselinterpretation

  • Curlopt_folloclocation wird auf true eingestellt, um automatisch Umleitungen zu verarbeiten.

  • Nachdem curl_multi_exec vollständig ausgeführt wurde, verwenden Sie curl_multi_getContent () und curl_getInfo (), um die endgültigen Antwortinformationen zu erhalten.

  • Curl_multi_close () kann erst sicher aufgerufen werden, nachdem die Daten vollständig abgerufen werden können.

Wenn Sie diese Schritte nicht korrekt vor curl_multi_close () ausführen, können Sie die umgeleiteten endgültigen Antwortdaten nicht erhalten.

Häufige Fehlerbeispiele

Hier ist eine fehleranfällige Art, es zu schreiben:

 <?php
$multiHandle = curl_multi_init();
$ch = curl_init('https://gitbox.net/redirect-example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);

// Fehler:Schließen Sie es direkt, wenn die Ausführung nicht abgeschlossen ist
curl_multi_close($multiHandle);

$response = curl_multi_getcontent($ch); // Der zu diesem Zeitpunkt erhaltene Inhalt kann leer oder undefiniert sein
?>

Problemanalyse :
Der Multi -Griff wird geschlossen, bevor die Anfrage abgeschlossen wurde, was dazu führt, dass die nachfolgende Unfähigkeit, die Umleitungsantwort und die Daten korrekt zu erhalten, nicht in der Lage ist.

Zusammenfassung

  • curl_multi_close () verwaltet keine Weiterleitungen , sondern ist nur für die Reinigung von Ressourcen verantwortlich.

  • Die Umleitung muss durch Einstellen von curlopt_foloclocation festgelegt werden, und die Anforderungsverarbeitung wird vor dem Schließen abgeschlossen.

  • Stellen Sie sicher, dass Sie alle erforderlichen Daten vor curl_multi_close () extrahieren .

  • In der richtigen Reihenfolge (ausführen → Inhalt abrufen → Handle → Multi schließen), um sicherzustellen, dass die Anforderung abgeschlossen ist und die Daten nicht verloren gehen.

Wenn Sie diese Details beherrschen, können Sie mit komplexen gleichzeitigen Anfragen leicht umgehen, insbesondere wenn es darum geht, Antworten umzuleiten!