Как использовать 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' );
Этот вопрос является продолжением этого вопроса.
1 answers
Настройки прокси-сервера работают так же, как обычные HTTP-запросы, но в данном случае, очевидно, маршрутизируются через прокси-сервер. С точки зрения WordPress все транспортные уровни API поддерживают прокси-соединения (fsockopen, fopen, CURL,).
Особенности конфигурации прокси-серверов заключаются в том, что они бывают разных видов, и каждая настройка отличается, поэтому ответить на этот вопрос сложно, на самом деле не имеет значения, находится ли ваш прокси на локальном хосте или удаленном, настройки wp-config.php
будут работать независимо. Обычно вы хотите использовать эти параметры, если вы находитесь в интрасети/брандмауэре, к которому предъявляются особые требования.
Стоит отметить, что вы можете просто настроить свой локальный хост/веб-сервер на использование прокси/цепочки по умолчанию для HTTP-запросов, и в этом случае ненеобходимо устанавливать какие-либо параметры с помощью wp-config.php
, так как это настроено на уровне сервера. Если вы отключите свой прокси-сервер, вы обычно увидите код ответа error 130 ERR_PROXY_CONNECTION_FAILED
, но эти настройки выходят за рамки WordPress.
Некоторые инструменты, которые могут помочь вам настроить и отладить прокси-соединения:
- Скрипач (только для Windows). http://www.fiddler2.com/fiddler2 /
- Чарльз http://www.charlesproxy.com /
- Кальмар http://www.squid-cache.org /
Чтобы разобраться в HTTP API WordPress, я рекомендую следующий фрагмент, используя действие http_api_debug
(изменено на var_dump
, найденное на сайте 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 ) );
}
В Ответ на запрос - интересная часть, иногда вы можете с первого взгляда определить, проходит ли ваш запрос через прокси..
Например, используя 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);
Теперь тот же самый запрос, но с использованием удаленного прокси-сервера, включенного через 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' );
Как вы можете видеть, прокси вывод отличается, самое главное, что прокси добавляет тег via
, в данном случае прокси-сервер кальмара. Прокси-серверы должны делать это и не изменять заголовок ответа сервера, но не все следуют правилам, поэтому будьте осторожны;).
Константа define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' )
полезна для предоставления доступа к хостам, которые вы, возможно, не захотите использовать через прокси (например, обновления WordPress). Комментарии в class-http.php
вводят в заблуждение, потому что по умолчанию localhost
и get_option('siteurl);
уже включены, но могут быть изменены с помощью фильтра pre_http_send_through_proxy
.
Некоторые дополнительные опции, которые работа с настройками прокси-сервера:WP_HTTP_BLOCK_EXTERNAL
WP_ACCESSIBLE_HOSTS