HTTP -Anfragen sind sehr häufig in Crawler -Projekten. Wenn Sie jedes Mal eine neue Verbindung herstellen müssen, während Sie eine große Datenmenge kriechen, kann dies die Effizienz beeinflussen, insbesondere wenn die Zielwebsite eine bestimmte Frequenzgrenze für Anfragen aufweist. Um diesen Prozess zu optimieren, ist es besonders wichtig, die Verbindung für lange Zeit offen zu halten. In PHP können wir die Methode curl_upekeep () verwenden, um die Persistenz der Verbindung aufrechtzuerhalten, wodurch häufige neue Verbindungen vermieden werden.
curl_upekeep () ist eine benutzerdefinierte Funktion, mit der normalerweise die Verbindung geschlossen wird, wenn HTTP -Anforderungen über die Curl -Bibliothek in PHP gesendet werden. Wenn Sie Curl_Upkeep () verwenden, können Sie die Wiederherstellung der Verbindung bei jedem Senden einer Anfrage vermeiden, was die Leistung verbessern kann, insbesondere wenn Crawler kontinuierlich Anfragen senden müssen.
In PHP stoßen Sie bei der Verwendung von CURL zur Ausführung von HTTP -Anforderungen normalerweise auf die abgeschlossene Standardverbindung. Um die Wiederherstellung der Verbindung jedes Mal wiederherzustellen, müssen wir relevante Parameter festlegen, um die Verbindung aktiv zu halten.
Hier ist ein Beispiel, das zeigt, wie man curl_upkeep () verwendet, um die Verbindung offen zu halten.
<?php
function curl_upkeep($url)
{
$ch = curl_init();
// aufstellencURLOptionen
curl_setopt($ch, CURLOPT_URL, $url); // ZielURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Gibt den Antwortinhalt anstelle der direkten Ausgabe zurück
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Automatischen Sprung zulassen
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Connection: keep-alive", // Bleib in Verbindung
"Keep-Alive: 300", // aufstellen超时时间,Einheiten in Sekunden
));
// aufstellen一个较长的超时,Vermeiden Sie, dass die Verbindung geschlossen wird
curl_setopt($ch, CURLOPT_TIMEOUT, 300); // aufstellen请求超时时间为5Minute
// implementierencURLFordern Sie die Ergebnisse an und erhalten Sie die Ergebnisse
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
return $response;
}
// verwendencurl_upkeep()Eine Anfrage stellen
$url = "https://m66.net/api/data"; // ZielURLErsetzen durchm66.net
$response = curl_upkeep($url);
echo $response;
?>
curl_init () : initialisieren Sie eine Curl -Sitzung.
curl_setopt () : Setzen Sie die Curl -Option, wobei curlopt_url die Ziel -URL angibt.
Anschluss halten : Durch die Verbindung: Keep-Alive- und Keep-Alive -Header-Parameter geben an, dass die Verbindung aktiv bleibt.
Timeout -Einstellung : Verwenden Sie den Parameter curlopt_timeout , um eine lange Zeit einzustellen, um zu vermeiden, dass die Verbindung vom Server geschlossen wird.
Bei Crawler -Projekten erhöht sich die häufige Einrichtung und Schließung von Verbindungen unnötig und verringert die Effizienz. Wenn wir in Verbindung bleiben, können wir:
Leistung verbessern : Verwenden Sie vorhandene Verbindungen wieder, ohne jedes Mal neue Verbindungen herstellen zu müssen und die Latenz zu verringern.
Banned Banned : Einige Zielwebsites können die Häufigkeit des Zugriffs auf dieselbe IP einschränken. Durch die Aufbewahrung der Verbindung kann die Anzahl der Verbindungen reduziert und der Anti-Crawler-Mechanismus ausgelöst werden.
Ressourcen sparen : Das Erstellen einer Verbindung benötigt einige Zeit und Ressourcen. Wenn Sie die Verbindung aufbewahren, speichern Sie Computerressourcen auf dem Server und dem Client.
Timeout : Es ist sehr wichtig, ein angemessenes Zeitüberschreitungen festzulegen. Wenn die Zeitüberschreitung zu lang festgelegt ist, kann dies dazu führen, dass die Anfrage zu lange hängt. Im Allgemeinen wird empfohlen, eine angemessene Auszeit nach den tatsächlichen Bedürfnissen festzulegen.
Verbindungsgrenzen : Einige Server können bestimmte Einschränkungen für anhaltende Verbindungen (z. B. die maximale Anzahl von Verbindungen) aufweisen, und Sie müssen möglicherweise die entsprechende Konfiguration anpassen.
Serverunterstützung : Nicht alle Server unterstützen lange Zeit in Verbindung. Stellen Sie bei Verwendung von Keep-Alive sicher, dass der Zielserver diese Funktion unterstützt.