您可以直接在wp_remote_post()
$args
, 根据以下示例developer.wordpress.org:
$response = wp_remote_post( $url, array(
\'method\' => \'POST\',
\'timeout\' => 45,
\'redirection\' => 5,
\'httpversion\' => \'1.0\',
\'blocking\' => true,
\'headers\' => array(),
\'body\' => array(
\'username\' => \'bob\',
\'password\' => \'1234xyz\'
),
\'cookies\' => array()
)
);
if ( is_wp_error( $response ) ) {
$error_message = $response->get_error_message();
echo "Something went wrong: $error_message";
} else {
echo \'Response:<pre>\';
print_r( $response );
echo \'</pre>\';
}
另一件需要注意的事情是:在本例中,超时是45秒,但在许多情况下,这将超过PHP
max_execution_time
时间限制,所以您仍然会得到一个错误,但这一次是一个致命的PHP(500)错误,而不是WordPress返回的http错误(所以您的情况实际上更糟!)。
这可以通过设置max_execution_time
在php中。ini,或者,如果你没有参加safe_mode
(在生产服务器上不太可能),您可以尝试在代码中以编程方式进行设置,如下例所示:
$timeout = 45;
if ( ! ini_get( \'safe_mode\' ) ){
set_time_limit( $timeout + 10 );
}
$response = wp_remote_post( $url, array(
\'timeout\' => $timeout
) );
这里,为了安全起见,我将PHP超时设置为比HTTP超时多10秒。
此外,最好的做法是将超时重置回原来的状态,这可能是ini_get( \'max_execution_time\' );