web-dev-qa-db-fra.com

Comment utiliser l'API HTTP avec un proxy?

Si je veux acheminer une requête HTTP via un proxy local (alias: sur le serveur actuel), comment pourrais-je éviter cela?

Les paramètres proxy autorisés pour le wp-config.php sont les suivants:

# 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' );

Cette question est un suivi de cette question .

6
kaiser

Les paramètres du proxy fonctionnent exactement comme les requêtes HTTP classiques, mais dans ce cas, ils sont évidemment routés via un proxy. En termes de WordPress, les couches de transport de l'API supportent toutes les connexions proxy (fsockopen, fopen, cURL,).

Les configurations de proxy ont différentes configurations et chaque configuration est différente, il est donc difficile de répondre à cette question. Peu importe que votre proxy soit sur votre hôte local ou distant, les paramètres wp-config.php fonctionneront malgré tout. Généralement, vous souhaitez utiliser ces paramètres si vous êtes sur un intranet/pare-feu ayant des exigences spécifiques.

Il est à noter que vous pouvez simplement configurer votre hôte local/serveur Web pour utiliser un proxy/chaînage par défaut pour les requêtes HTTP. Dans ce cas, il est pasnécessaire de définir les options avec wp-config.php car celles-ci sont configurées au niveau du serveur. Si vous désactivez votre proxy, vous voyez généralement un code de réponse de error 130 ERR_PROXY_CONNECTION_FAILED, mais ces configurations ne font pas partie du champ d'application de WordPress.

Quelques outils pouvant vous aider à configurer et déboguer des connexions de proxy:

Pour creuser dans l'API HTTP WordPress, je recommande l'extrait suivant à l'aide de l'action http_api_debugmodifiée en var_dump trouvée via le site de viper007bond):

add_action( 'http_api_debug', 'viper_http_api_debug', 10, 5 );

function viper_http_api_debug( $response, $type, $class, $args, $url ) {
    // You can change this from error_log() to var_dump() but it can break AJAX requests
    var_dump( 'Request URL: ' . var_export( $url, true ) );
    var_dump( 'Request Args: ' . var_export( $args, true ) );
    var_dump( 'Request Response : ' . var_export( $response, true ) );
}

Le _ (Request Responseest la partie intéressante), vous pouvez parfois dire en un clin d'œil si votre requête passe par un proxy.

Par exemple, utilisez l'API HTTP par défaut pour effectuer la demande suivante.

$api_url = 'http://api.wordpress.org/secret-key/1.0/';
$response = wp_remote_get($api_url);
$header = wp_remote_retrieve_headers( $response );

var_dump($header);

enter image description here

Maintenant la même requête exacte mais en utilisant un proxy distant activé via wp-config.php

//I grabbed these off of Google search they will not work for long.
define( 'WP_PROXY_Host', '210.22.115.162' );
define( 'WP_PROXY_PORT', '3128' );

enter image description here

Comme vous pouvez voir le proxy, la sortie est différente, mais le proxy ajoute la balise via, dans ce cas un proxy squid. Les proxies sont supposésfaire ceci et not modifier l'en-tête de réponse du serveur, mais tout le monde ne suit pas les règles, soyez donc prudent;).

La constante define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' ) est utile pour autoriser l'accès à des hôtes que vous ne souhaitez peut-être pas utiliser via un proxy (mises à jour de WordPress, par exemple). Les commentaires dans class-http.php sont trompeurs car par défaut, localhost et get_option('siteurl); sont déjà inclus, mais peuvent être modifiés via le filtre pre_http_send_through_proxy.

Certaines options supplémentaires qui fonctionnent avec les paramètres de proxy sont les suivantes:
WP_HTTP_BLOCK_EXTERNALWP_ACCESSIBLE_HOSTS

7
Wyck