I'm läuft eine Curl-Anfrage auf eine eXist-Datenbank durch php. Der Datensatz ist sehr groß, und als Ergebnis, die Datenbank konsequent dauert eine lange Zeit, um eine XML-Antwort zurück. Um das zu beheben, haben wir eine Curl-Anfrage mit einem vermeintlich langen Timeout eingerichtet.
$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);
Die Curl-Anforderung endet jedoch immer, bevor die Anforderung abgeschlossen ist (<1000 bei Anforderung über einen Browser). Weiß jemand, ob dies der richtige Weg ist, um Timeouts in curl zu setzen?
Hmm, für mich sieht es so aus, als ob CURLOPT_TIMEOUT
die Zeitspanne definiert, die jede cURL-Funktion zur Ausführung benötigen darf. Ich denke, Sie sollten sich stattdessen CURLOPT_CONNECTTIMEOUT
ansehen, denn das sagt cURL, wie lange es maximal auf den Abschluss der Verbindung warten soll.
Ihr Code setzt den Timeout auf 1000 Sekunden. Für Millisekunden verwenden Sie CURLOPT_TIMEOUT_MS
.
Sie können die Anfrage nicht von einem Browser aus starten, da es zu einer Zeitüberschreitung kommt, wenn Sie auf die Antwort des Servers warten, der die CURL-Anfrage ausführt. Der Browser ist wahrscheinlich in 1-2 Minuten, die Standard-Netzwerk-Timeout aus.
Sie müssen die Anfrage über die Kommandozeile/Terminal ausführen.