WordPress est utilisé pour un petit site web de mon boulot. Le serveur web qui l’héberge doit utiliser un proxy pour accéder au web, ce qui est nécessaire pour certains plugins et pour les mises à jour.
Le proxy est déclaré (comme spécifié dans la documentation) dans le fichier wp-config.php
define('WP_PROXY_HOST', 'myCache.fr'); define('WP_PROXY_PORT', '3128');
Depuis la version 3.8.1, le tableau de bord n’affiche aucune mise à jour disponible, alors que la version 3.9.1 est sortie. Idem pour les plugins. Aucun message d’erreur n’est affiché, y compris en forçant la vérification des mises à jour, et en activant les messages de debug de WordPress.
J’ai dû utiliser wireshark pour comprendre ce qu’il se passe :
- WordPress envoit une requête POST vers https://api.wordpress.org/plugins/info/1.0
- Le serveur proxy Squid répond avec une erreur 501 : « Unsupported Request Method and Protocol »
Il semble que le proxy ne supporte pas les requêtes POST en https. J’ai donc recherché où était définie l’URL https dans le code de WordPress. Elle se trouve dans wp-includes/update.php. Mais les URLs sont définies en http, et le code suivant transforme le protocole en https si ssl est disponible (à trois endroits différents):
if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' );
J’ai donc commenté ces lignes :
/**if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' );*/
La mise à jour a été détectée et elle s’est installée correctement. Bien sûr, je vais devoir refaire cette modification après chaque mise à jour…
As a better workaround, you can install php curl extension, libcurl will be used as the default transport handler instead « stream » and it behave correctly with https post and proxies.
Thanks a lot, I’ll try that !
Missing the php curl extension was my problem – once that was installed, the site was able to reach out to get plugins etc via a proxy using a https url etc etc.