web-dev-qa-db-ja.com

プロキシでHTTP APIを使用する方法

ローカル(エイリアス:現在のサーバー上の)プロキシを通してHTTPリクエストをルーティングしたい場合、これをどのように回避しますか?

wp-config.phpに対して許可されているプロキシ設定は次のとおりです。

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

この質問は この質問のフォローアップです

6
kaiser

プロキシ設定は通常のHTTPリクエストと同じように機能しますが、この場合は明らかにプロキシ経由でルーティングされます。 WordPressに関しては、APIのトランスポートレイヤーはすべてプロキシ接続(fsockopen、fopen、cURL、)をサポートしています。

プロキシ設定に関することは、いくつかのフレーバーがあり、それぞれの設定が異なるため、これに答えるのが難しくなります。プロキシがローカルホストにあるかリモートにあるかは関係ありません。wp-config.php設定は関係なく機能します。通常、特定の要件があるイントラネット/ファイアウォールでこれらの設定を使用します。

デフォルトでHTTPリクエストにプロキシ/チェーンを使用するようにlocalhost/webserverを設定できるだけであり、その場合はwp-config.phpでオプションを設定する必要はないnotこれはサーバーレベルで構成されます。プロキシを無効にすると、通常、error 130 ERR_PROXY_CONNECTION_FAILEDの応答コードが表示されますが、これらのセットアップはWordPressの範囲外です。

プロキシ接続のセットアップとデバッグに役立つツール:

WordPress HTTP APIを掘り下げるには、http_api_debugアクションを使用した次のスニペットをお勧めします(viper007bondのサイトで見つかったvar_dumpに変更されました)。

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

Request Responseは興味深い部分です。リクエストがプロキシを経由しているかどうかをひと目で確認できる場合があります。

たとえば、デフォルトのHTTP APIを使用して次のリクエストを作成します。

$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

まったく同じリクエストですが、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

プロキシを見るとわかるように、出力は異なります。最も重要なのは、プロキシがviaタグ(この場合はsquidプロキシ)を追加していることです。プロキシはsupposedでこれを行い、notはサーバーresponse-headerを変更しますが、全員がルールなので注意してください;)。

定数define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' )は、プロキシ(WordPressの更新など)を通過したくないホストへのアクセスを許可するのに役立ちます。 class-http.phpのコメントは、デフォルトでlocalhostget_option('siteurl);がすでに含まれていますが、pre_http_send_through_proxyフィルターを介して変更できるため、誤解を招きます。

プロキシ設定で機能するいくつかの追加オプションは次のとおりです。
WP_HTTP_BLOCK_EXTERNALWP_ACCESSIBLE_HOSTS

7
Wyck