我正在尝试在需要代理连接才能连接到internet的服务器上设置Wordpress。以下是我在wp配置中输入的内容。php:
/* Configure HTTP Proxy Server */
define(\'WP_PROXY_HOST\', \'xx.xx.xx.xx\');
define(\'WP_PROXY_PORT\', \'8080\');
define(\'WP_PROXY_USERNAME\', \'xxxxx\');
define(\'WP_PROXY_PASSWORD\', \'xxxxx\');
define(\'WP_PROXY_BYPASS_HOSTS\', \'localhost\');
(出于隐私原因,我将真实IP、用户名和密码替换为xxx)
不幸的是,Wordpress仍然无法连接到internet。“站点运行状况”页面显示此错误:
Your site is unable to reach WordPress.org at 198.143.164.251, and returned the error: cURL error 56: Received HTTP code 407 from proxy after CONNECT
407是要求代理身份验证的错误。
我多次检查代理的IP、用户名和密码,结果都是正确的。当我使用
export http_proxy="http://xxxxx:[email protected]:8080"
然后使用wget下载一些东西。它通过代理连接,并正确下载文件。
我尝试使用数据包捕获程序来查看Wordpress和代理之间的连接是什么样子的,标题如下所示:
CONNECT api.wordpress.org:443 HTTP/1.1
Host: api.wordpress.org:443
User-Agent: WordPress/5.2.4; http://xx.xx.xx.xx/
Proxy-Connection: Keep-Alive
Connection: close
代理服务器的答复如下:
HTTP/1.1 407 authenticationrequired
Date: Fri, 18 Oct 2019 11:31:00 GMT
Content-Type: text/html
Cache-Control: no-cache
Content-Length: 4365
Proxy-Connection: Keep-Alive
Proxy-Authenticate: Negotiate
Proxy-Authenticate: NTLM
Proxy-Authenticate: Basic realm="McAfee Web Gateway"
我想应该有一个
Proxy-Authorization: Basic xxxxxxxxxxxxxxx
第一个数据包中的标头,但由于某些原因,没有类似的内容。我该怎么办?我是不是遗漏了什么?
最合适的回答,由SO网友:Sally CJ 整理而成
不确定这是否有帮助,但您可以尝试。。
所以WordPress的默认HTTP传输使用cURL,而HTTPclass 将代理授权方法设置为CURLAUTH_ANY
(参见source), 这或许可以解释为什么Proxy-Authorization: Basic xxxxx...
请求中缺少标头。
还有一个hook 您可以尝试将代理授权方法更改为CURLAUTH_BASIC
(得到广泛支持,但也非常不安全),CURLAUTH_NTLM
或其他可用的methods.
因此,将此添加到您的主题中functions.php
文件(或将代码放入Must-Use plugin):
add_action( \'http_api_curl\', function ( $handle, $r, $url ) {
$proxy = new WP_HTTP_Proxy();
if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) {
curl_setopt( $handle, CURLOPT_PROXYAUTH, CURLAUTH_BASIC );
}
}, 10, 3 );
或者,您可以将PHP流设置为默认HTTP传输
add_filter( \'http_api_transports\', function ( $transports ) {
return [ \'streams\', \'curl\' ];
} );
查看挂钩的
reference 和
WP_Http_Streams
了解更多信息。但基本上,钩子允许您使用自定义类
WP_Http_Streams
将始终设置
Proxy-Authorization: Basic xxxxx...
必要时使用收割台。