Wie verwende ich die HTTP-API mit einem Proxy?

7

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

wp-config.phpFolgende Proxy-Einstellungen sind zulässig :

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

Diese Frage ist eine Fortsetzung dieser Frage .

Kaiser
quelle
Ich verstehe die Frage nicht genau. Sie scheinen genau dort die Antwort zu haben. Dies sind die Proxy-Einstellungen für die HTTP-API. Wenn Sie einen Proxy durchlaufen müssen, um externe Anforderungen zu stellen, dann tun Sie dies auf diese Weise.
Otto
Lesen Sie die erste Frage: Ja, diese haben nichts mit Reverse-Proxys zu tun. Diese dienen dazu, Anfragen von WP an die Außenwelt über einen Proxyserver zu stellen.
Otto
@Otto Ja, die Antwort ist klar und ja, sie kam aus der anderen Frage. Ich bin froh, dass du diesen Punkt verstanden hast. WPSE ist ein Referenzsystem und basiert auf Erklärungen und Details, die an keiner anderen Stelle oder hier ausführlicher angegeben sind ... daher die Frage.
Kaiser
Das macht keinen Sinn. Warum haben Sie die Frage gestellt, wenn Sie die Antwort bereits kannten? Edit: Weißt du was, egal, mach dir nicht die Mühe zu erklären. Ich werde nur abstimmen und abstimmen, um es zu löschen, da dies keinen Sinn macht und nicht hier sein sollte.
Otto
1
@Otto Als ich wieder auf deinen Kommentar gestoßen bin: Siehe diesen Screenshot bitte .
Kaiser

Antworten:

7

Die Proxy-Einstellungen funktionieren wie normale HTTP-Anforderungen, werden jedoch in diesem Fall offensichtlich über einen Proxy geleitet. In Bezug auf WordPress unterstützen alle Transportschichten der API Proxy-Verbindungen (fsockopen, fopen, cURL,).

Die Proxy-Konfigurationen sind in verschiedenen Varianten erhältlich und jedes Setup ist anders, sodass die Beantwortung dieses Problems schwierig ist. Es spielt keine Rolle, ob sich Ihr Proxy auf Ihrem lokalen Host oder Ihrer Remote befindet. Die wp-config.phpEinstellungen funktionieren unabhängig davon. In der Regel möchten Sie diese Einstellungen verwenden, wenn Sie sich in einem Intranet / einer Firewall befinden, für die bestimmte Anforderungen gelten.

Es ist erwähnenswert, einfach einstellen kann Ihre localhost / Webserver für HTTP - Anfragen über einen Proxy / Verkettungs die standardmäßig verwendet und in diesem Fall ist es nicht notwendig , alle Optionen mit einzustellen , wp-config.phpda dies auf der Serverebene konfiguriert ist. Wenn Sie Ihren Proxy deaktivieren, wird normalerweise ein Antwortcode error 130 ERR_PROXY_CONNECTION_FAILEDvon angezeigt. Diese Einstellungen liegen jedoch außerhalb des Bereichs von WordPress.

Einige Tools, mit denen Sie Proxy-Verbindungen einrichten und debuggen können:

Um in die WordPress-HTTP-API einzusteigen, empfehle ich das folgende Snippet mit der http_api_debugAktion (geändert, var_dumpum über die Website von viper007bond gefunden zu werden):

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 Anforderungsantwort ist der interessante Teil. Manchmal können Sie mit einem kurzen Blick erkennen, ob Ihre Anfrage über einen Proxy erfolgt.

Verwenden Sie beispielsweise die Standard-HTTP-API, um die folgende Anforderung zu stellen.

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

Geben Sie hier die Bildbeschreibung ein

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

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

Geben Sie hier die Bildbeschreibung ein

Wie Sie am Proxy sehen können, ist die Ausgabe anders. Am wichtigsten ist, dass der Proxy das viaTag hinzufügt , in diesem Fall einen Squid-Proxy. Proxies sollen dies tun und den Server- Antwortheader nicht ändern, aber nicht jeder befolgt die Regeln, also sei 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 über einen Proxy verwenden möchten (z. B. WordPress-Updates). Die Kommentare in der class-http.phpsind irreführend , da standardmäßig localhostund get_option('siteurl);bereits enthalten sind , aber über die verändert werden pre_http_send_through_proxyFilter.

Einige zusätzliche Optionen, die mit den Proxy-Einstellungen funktionieren, sind:
WP_HTTP_BLOCK_EXTERNAL WP_ACCESSIBLE_HOSTS

Wyck
quelle