如何将HTTP API与代理一起使用?

时间:2012-12-05 作者:kaiser

如果我想通过本地(别名:在当前服务器上)代理路由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\' );
这个问题是a follow up on this question.

1 个回复
最合适的回答,由SO网友:Wyck 整理而成

代理设置的工作方式与常规HTTP请求类似,但在这种情况下,显然是通过代理路由的。就WordPress而言,API的传输层都支持代理连接(fsockopen、fopen、cURL等)。

代理配置有几种不同的风格,每种设置都不同,因此很难回答这个问题,代理是否位于本地主机或远程主机上并不重要wp-config.php 不管怎样,设置都会起作用。如果您位于具有特定要求的intranet/防火墙上,通常需要使用这些设置。

值得注意的是,您只需将本地主机/Web服务器设置为默认情况下对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_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);
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代理。代理应该执行此操作,并且not 更改服务器响应标头,但并非所有人都遵守规则,因此请小心;)。

常量define( \'WP_PROXY_BYPASS_HOSTS\', \'localhost, www.example.com\' ) 对于允许访问您可能不想通过代理的主机(例如WordPress更新)非常有用。中的注释class-http.php 具有误导性,因为默认情况下localhostget_option(\'siteurl); 已包含,但可以通过pre_http_send_through_proxy 滤器

使用代理设置的其他一些选项包括:
WP_HTTP_BLOCK_EXTERNAL WP_ACCESSIBLE_HOSTS

结束

相关推荐

How deactivate the http-api

为它提供一个tipp或解决方案来停用WP\\U Http\\U Streams类中的方法request()?我也在脱机服务器上使用WordPress,并让wp\\U debug true用于开发和测试。但是我从函数中得到了很多关于使用http类的警告;例如,在仪表板中读取提要的函数。目前我已经停用了更新主题、插件、核心和cron的所有挂钩;请参阅我的小插件:https://github.com/bueltge/WP-Offline谢谢你的回复