Schlagwort-Archive: cURL

WordPress Fehler: Connection timed out

Jedes Mal wenn ich bei einer lokalen WordPress Installation das Dashboard aufrief, dauerte dies mehrere Sekunden und es erschien die Fehlermeldung WP HTTP Error: Resolving timed out after 3512 milliseconds. Nach einigem Suchen habe ich die betreffende Stelle in der wp-includes/class-http.php gefunden, die diesen Fehler ausgegeben hat.

Im nächsten Schritt habe ich dann mittels curl_getinfo( $handle ); das Ziel der Anfrage herausgefunden, https://api.wordpress.org/plugins/update-check/1.1/. Nach einigem herumprobieren habe ich versucht die selbe Abfrage im Terminal durchzuführen, also curl -vv --connect-timeout 3 https://api.wordpress.org/plugins/update-check/1.1/. Und siehe da, auch hier reichen 3s (wie von WordPress vorgegeben) nicht aus.

Durch eine Google Suche stieß ich auf eine cURL-Mailingliste wo unter anderem IPv6 als mögliche Ursache genannt wird. Also nochmal die cURL-Doku gewälzt und die Option --ipv4 gefunden. Mit dieser lässt sich die Abfrage problemlos ausführen. Die Ursache für den Fehler war, dass cURL jeweils 15s lang versucht hat per DNS über IPv6 den Hostnamen aufzulösen, was mangels funktionierendem IPv6 am Telekomiker Anschluss nicht ging. Bis cURL auf IPv4 zurückgefallen war, war das von WordPress definierte Timeout (3 Sekunden) abgelaufen.

Ein auf die schnelle eingefügtes curl_setopt( $handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); in die class-http.php löste den Fehler auch in WordPress. Da Core-Dateien zu verändern immer schlecht ist (Updates und so) gibt es praktischerweise vor der Ausführung des HTTP-Request einen Hook, mit dem sich das $handle manipulieren lässt. Daraus ergibt sich dieses (MU-)Plugin: