Moins qu'une réponse, mais juste une liste de choses directement tirées de mon expérience avec elle - peut-être que vous avez oublié quelque chose.
Débogage de la requête et de ses résultats
Sans creuser trop profondément dans le processus de mise à jour, mais l'API WP HTTP utilise la WP_HTTP
classe. Il offre également une bonne chose: un crochet de débogage.
do_action( 'http_api_debug', $response, 'response', $class, $args, $url );
Où $response
peut aussi être un WP_Error
objet qui vous en dit peut-être plus.
Remarque: à partir d'un bref test, ce filtre semble ne fonctionner (pour une raison quelconque) que si vous le placez aussi près de l'endroit où vous effectuez réellement la demande. Alors peut-être que vous devez l'appeler à partir d'un rappel sur l'un des filtres ci-dessous.
WP_HTTP
Arguments de classe
Les arguments Classes lui-même sont filtrables, mais certains afaik sont réinitialisés par les méthodes internes à ce que WP suppose être nécessaire.
apply_filters( 'http_request_args', $r, $url );
L'un des arguments est ssl_verify
, ce qui est vrai par défaut (mais pour moi, cela pose d'énormes problèmes lors de la mise à jour depuis - par exemple - GitHub). Edit: Après avoir débogué une demande de test, j'ai trouvé un autre argument qui est défini pour vérifier si SSL est défini sur true
. Il est appelé sslverify
(sans séparer le trait de soulignement). Aucune idée d'où cela est entré dans le jeu, s'il est réellement utilisé ou abandonné et si vous avez une chance d'influencer sa valeur. Je l'ai trouvé en utilisant le 'http_api_debug'
filtre.
Complètement personnalisé
Vous pouvez également "simplement" remplacer tous les composants internes et opter pour une configuration personnalisée. Il y a un filtre pour ça.
apply_filters( 'pre_http_request', false, $r, $url );
Le premier argument doit être défini sur true. Ensuite, vous pouvez interagir avec les arguments à l'intérieur $r
et le résultat de parse_url( $url );
.
Procuration
Une autre chose qui pourrait fonctionner pourrait être de tout exécuter via un proxy personnalisé. Cela nécessite quelques paramètres dans votre wp-config.php
. Je n'ai jamais essayé cela auparavant, mais j'ai parcouru les constantes il y a quelque temps et j'ai résumé quelques exemples qui devraient fonctionner et inclus quelques commentaires au cas où j'en aurais besoin un jour. Vous devez définir WP_PROXY_HOST
et en WP_PROXY_PORT
tant que min. réglage. Sinon, rien ne fonctionnera et il contournera simplement votre proxy.
# 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' );
ÉDITER
La WP_HTTP
classe agit normalement comme classe de base (sera étendue pour différents scénarios). Les étendant les WP_HTTP_*
classes sont Fsockopen
, Streams
, Curl
, Proxy
, Cookie
, Encoding
. Si vous accrochez un rappel à l' 'http_api_debug'
action, le troisième argument vous indiquera quelle classe a été utilisée pour votre demande.
À l'intérieur de la WP_HTTP_curl
classe, vous trouverez la request()
méthode. Cette méthode propose deux filtres pour intercepter le comportement SSL: un pour les requêtes locales 'https_local_ssl_verify'
et un pour les requêtes distantes 'https_ssl_verify'
. WP définira probablement au local
fur localhost
et à mesure ce que vous obtenez en retour get_option( 'siteurl' );
.
Donc, ce que je ferais, c'est d'essayer ce qui suit juste avant de faire cette demande (ou à partir d'un rappel lié à la demande la plus proche:
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' );
Sidenote: Dans la plupart des cas, WP_HTTP_curl
sera utilisé pour gérer les procurations.