Wie verwende ich die HTTP API mit einem Proxy?

Wenn ich eine HTTP-Anfrage über einen lokalen (Alias: auf dem aktuellen Server) Proxy weiterleiten möchte, wie würde ich das umgehen?

Die erlaubten Proxy-Einstellungen für die wp-config.php sind folgende:

 # HTTP Proxies # Used for eg 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' ); 

Diese Frage ist ein Follow-up zu dieser Frage .

Solutions Collecting From Web of "Wie verwende ich die HTTP API mit einem Proxy?"

Die Proxy-Einstellungen funktionieren wie normale HTTP-Anfragen, werden aber in diesem Fall offensichtlich über einen Proxy weitergeleitet. In Bezug auf WordPress unterstützen die Transport-Layer der API alle Proxy-Verbindungen (fsockopen, fopen, cURL,).

Die Dinge über Proxy-Konfigurationen sind in verschiedenen Geschmacksrichtungen und jede Einrichtung ist anders, so macht es die Beantwortung schwierig, es ist nicht wirklich wichtig, wenn Ihr Proxy auf Ihrem wp-config.php oder Remote ist, die wp-config.php Einstellungen funktionieren unabhängig. Normalerweise möchten Sie diese Einstellungen verwenden, wenn Sie in einem Intranet / einer Firewall bestimmte Anforderungen haben.

Es ist erwähnenswert, dass Sie Ihren wp-config.php / Webserver so einstellen können, dass er für HTTP-Anfragen standardmäßig einen Proxy / Verkettung verwendet. In diesem Fall ist es nicht notwendig, Optionen mit wp-config.php da dies auf wp-config.php konfiguriert ist. Wenn Sie Ihren Proxy deaktivieren, sehen Sie normalerweise einen Antwortcode des error 130 ERR_PROXY_CONNECTION_FAILED , aber diese Setups liegen außerhalb des Bereichs von WordPress.

Einige Tools, mit denen Sie Proxyverbindungen einrichten und debuggen können:

Um in die WordPress-HTTP-API http_api_debug empfehle ich das folgende Snippet mit der Aktion http_api_debug (geändert zu var_dump gefunden über die Website von 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 ) ); } 

Die Anfrage Antwort ist der interessante Teil, manchmal können Sie mit einem kurzen Blick sagen, ob Ihre Anfrage Proxy durchläuft ..

Verwenden Sie beispielsweise die Standard-HTTP-API, um die folgende Anforderung auszuführen.

 $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); 

Bildbeschreibung hier eingeben

Jetzt die gleiche genaue Anfrage, aber mit einem Remote-Proxy über wp-config.php aktiviert

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

Bildbeschreibung hier eingeben

Wie Sie sehen, der Proxy ist die Ausgabe anders, am wichtigsten ist der Proxy das via Tag, in diesem Fall ein Squid-Proxy. Proxies sollten dies tun und nicht den Server-Response-Header ändern, aber nicht jeder folgt den Regeln, sei also vorsichtig;).

Die Konstante define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' ) ist nützlich, um den Zugriff auf Hosts zu ermöglichen, die Sie möglicherweise nicht durch einen Proxy define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' ) möchten (zB WordPress-Updates). Die Kommentare in der class-http.php sind irreführend, weil standardmäßig localhost und get_option('siteurl); sind bereits enthalten, können aber über den pre_http_send_through_proxy Filter pre_http_send_through_proxy werden.

Einige zusätzliche Optionen, die mit den Proxyeinstellungen funktionieren, sind:
WP_HTTP_BLOCK_EXTERNAL WP_ACCESSIBLE_HOSTS