这不是一个答案,但仅仅是我的经验中列出的一系列事情——也许你忽略了什么。
调试请求(&P);它的结果没有深入到更新过程中,但WP HTTP API使用WP_HTTP
班它还提供了一个好东西:调试挂钩。
do_action( \'http_api_debug\', $response, \'response\', $class, $args, $url );
在哪里
$response
也可以是
WP_Error
可能会告诉你更多的东西。
注意:从一个简短的测试来看,这个过滤器似乎只有(出于某种原因)在您将其置于实际执行请求的位置时才起作用。因此,您可能需要从以下某个过滤器的回调中调用它。
WP_HTTP
类参数本身是可过滤的,但有些类参数会被方法内部重置为WP认为需要的参数。
apply_filters( \'http_request_args\', $r, $url );
其中一个论点是
ssl_verify
, 这在默认情况下是正确的(但对我来说,从GitHub更新时会导致大量问题)
编辑:调试测试请求后,我找到了另一个参数,该参数设置为验证SSL是否设置为
true
. 它叫
sslverify
(不分隔下划线)。不知道这是从哪里来的,它是在使用还是被放弃,你是否有机会影响它的价值。我用
\'http_api_debug\'
滤器
完全自定义,您还可以“简单地”覆盖整个内部构件并进行自定义设置。有一个过滤器。
apply_filters( \'pre_http_request\', false, $r, $url );
第一个参数需要设置为true。这样你就可以与里面的参数进行交互
$r
结果来自
parse_url( $url );
.
代理
另一个可行的方法是通过自定义代理运行所有内容。这需要在您的
wp-config.php
. 我以前从未尝试过这一点,但不久前我浏览了这些常量,总结了一些应该有用的示例,并附上了一些注释,以备将来需要。你必须定义
WP_PROXY_HOST
和
WP_PROXY_PORT
作为最小设置。否则什么都不起作用,它只会绕过您的代理。
# 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\' );
编辑
WP_HTTP
类通常用作基本类(将针对不同的场景进行扩展)。延伸
WP_HTTP_*
课程为
Fsockopen
,
Streams
,
Curl
,
Proxy
,
Cookie
,
Encoding
. 如果将回调挂接到
\'http_api_debug\'
-操作,则第三个参数将告诉您哪个类用于您的请求。
内部WP_HTTP_curl
同学们,你们会发现request()
方法此方法提供了两个筛选器来拦截SSL行为:一个用于本地请求\'https_local_ssl_verify\'
一个用于远程请求\'https_ssl_verify\'
. WP可能会定义local
像localhost
以及你从中得到的回报get_option( \'siteurl\' );
.
因此,我要做的是在您执行该请求之前尝试以下操作(或从挂接到最近请求的回调):
add_filter( \'https_ssl_verify\', \'__return_true\' );
# Local requests should be checked with something like
# \'localhost\' === $_SERVER[\'HTTP_HOST\'] or similar
# add_filter( \'https_local_ssl_verify\', \'__return_true\' );
旁注:大多数情况下
WP_HTTP_curl
将用于处理代理。