Weniger als eine Antwort, aber nur eine Liste von Dingen, die direkt aus meiner Erfahrung damit stammen - vielleicht haben Sie etwas übersehen.
Debuggen der Anfrage und ihrer Ergebnisse
Ohne zu tief in den Aktualisierungsprozess einzudringen, aber die WP HTTP API verwendet die WP_HTTP
Klasse. Es bietet auch eine schöne Sache: Ein Debug-Hook.
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
Wo $response
kann auch ein WP_Error
Objekt sein, das Ihnen vielleicht mehr sagt.
Hinweis: Nach einem kurzen Test scheint dieser Filter (aus irgendeinem Grund) nur zu funktionieren, wenn Sie ihn so nahe an der Stelle platzieren, an der Sie die Anforderung tatsächlich ausführen. Vielleicht müssen Sie es innerhalb eines Rückrufs auf einem der folgenden Filter aufrufen.
WP_HTTP
Klassenargumente
Die Classes-Argumente selbst sind filterbar, aber einige werden von den internen Methoden der Methoden auf das zurückgesetzt, was WP für erforderlich hält.
apply_filters( 'http_request_args', $r, $url );
Eines der Argumente ist ssl_verify
, dass dies standardmäßig zutrifft (aber für mich verursacht es massive Probleme beim Aktualisieren von beispielsweise GitHub). Bearbeiten: Nach dem Debuggen einer Testanforderung habe ich ein anderes Argument gefunden, mit dem überprüft werden soll, ob SSL aktiviert ist true
. Es heißt sslverify
(ohne Unterstrich). Keine Ahnung, wo dies ins Spiel kam, ob es tatsächlich benutzt oder aufgegeben wird und ob Sie die Chance haben, seinen Wert zu beeinflussen. Ich habe es mit dem 'http_api_debug'
Filter gefunden.
Völlig individuell
Sie können auch "einfach" die gesamten Interna überschreiben und ein benutzerdefiniertes Setup durchführen. Dafür gibt es einen Filter.
apply_filters( 'pre_http_request', false, $r, $url );
Das erste Argument muss auf true gesetzt werden. Dann können Sie mit den Argumenten im Inneren $r
und dem Ergebnis von interagieren parse_url( $url );
.
Proxy
Eine andere Sache, die funktionieren könnte, könnte sein, alles über einen benutzerdefinierten Proxy auszuführen. Dies erfordert einige Einstellungen in Ihrem wp-config.php
. Ich habe das noch nie versucht, aber ich habe vor einiger Zeit die Konstanten durchgearbeitet und einige Beispiele zusammengefasst, die funktionieren sollten , und einige Kommentare hinzugefügt, falls ich sie eines Tages brauche. Sie müssen definieren WP_PROXY_HOST
und WP_PROXY_PORT
als min. Rahmen. Sonst funktioniert nichts und es wird einfach Ihr Proxy umgangen.
# HTTP Proxies
# Used for e.g. in Intranets
# Fixes Feeds as well
# Defines the proxy adresse.
define( 'WP_PROXY_HOST', '127.0.84.1' );
# Defines the proxy port.
define( 'WP_PROXY_PORT', '8080' );
# Defines the proxy username.
define( 'WP_PROXY_USERNAME', 'my_user_name' );
# Defines the proxy password.
define( 'WP_PROXY_PASSWORD', 'my_password' );
# Allows you to define some adresses which
# shouldn't be passed through a proxy.
define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' );
BEARBEITEN
Die WP_HTTP
Klasse fungiert normalerweise als Basisklasse (wird für verschiedene Szenarien erweitert). Die Verlängerungs WP_HTTP_*
Klassen sind Fsockopen
, Streams
, Curl
, Proxy
, Cookie
, Encoding
. Wenn Sie einen Rückruf an die 'http_api_debug'
-action verknüpfen, gibt das dritte Argument an, welche Klasse für Ihre Anforderung verwendet wurde.
In der WP_HTTP_curl
Klasse finden Sie die request()
Methode. Diese Methode bietet zwei Filter zum Abfangen des SSL-Verhaltens: einen für lokale Anforderungen 'https_local_ssl_verify'
und einen für Remote-Anforderungen 'https_ssl_verify'
. WP wird wahrscheinlich definieren, local
als localhost
und was Sie als Gegenleistung erhalten get_option( 'siteurl' );
.
Ich würde also Folgendes versuchen, bevor Sie diese Anforderung ausführen (oder von einem Rückruf, der mit der nächstgelegenen Anforderung verknüpft ist:
add_filter( 'https_ssl_verify', '__return_true' );
# Local requests should be checked with something like
# 'localhost' === $_SERVER['HTTP_HOST'] or similar
# add_filter( 'https_local_ssl_verify', '__return_true' );
Nebenbemerkung: In den meisten Fällen WP_HTTP_curl
werden Proxies verwendet.