传出代理连接问题

时间:2019-10-18 作者:Meeep

我正在尝试在需要代理连接才能连接到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
第一个数据包中的标头,但由于某些原因,没有类似的内容。我该怎么办?我是不是遗漏了什么?

1 个回复
最合适的回答,由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\' ];
} );
查看挂钩的referenceWP_Http_Streams 了解更多信息。但基本上,钩子允许您使用自定义类WP_Http_Streams 将始终设置Proxy-Authorization: Basic xxxxx... 必要时使用收割台。

相关推荐

Authentication/API Questions

我们正在尝试使用S2Member来管理我们的WP站点和我们正在启动的Flash程序的成员资格。我们希望在用户登录并保持登录状态时使用S2Member对其进行身份验证。问题:Java层需要知道哪个用户登录到Wordpress(如果有的话),以便它可以将正确的数据返回到flash层。建议的解决方案:Wordpress的cookie也应该包含在Flash到Java的请求中。Java可以使用这些cookie来查询Wordpress DB以获取用户ID。我们需要知道的是:1。是否可以从数据库或文件系统获取带有coo