成功完成wp_Remote_POST时出现错误

时间:2014-07-11 作者:Nich

What I\'m trying to do: 使用wp\\u remote\\u POST传递POST数据。

foreach ( $articles as $article_id ) {
    $postarray = array(
    \'method\'        => \'POST\',
    \'timeout\'       => 5,
    \'redirection\'   => 5,
    \'httpversion\'   => \'1.0\',
    \'blocking\'      => true,
    \'headers\'       => array(),
    \'body\'          => array(
        \'article_id\' => $article_id
        ),
    \'cookies\' => array()
    );

    $response = wp_remote_post($url, $postarray);

    if ( is_wp_error($response) ) {
        $error_message = $response->get_error_message();
        echo $error_message;
    } else {
        // the rest of my code here
    }
}
我每次通话都有20多个帖子。每次循环完成时,我都会收到以下错误消息:

“操作在5001毫秒后超时,接收到0字节”

奇怪的是,数据实际上被成功地接收并存储在指定的$url 服务器

有人能告诉我正确的方向吗?我应该去哪里才能避免收到错误消息?

参考号:wp_remote_post

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

经过一段时间让错误信息干扰我的屏幕后,我想出了一个解决方法。

是的,这是一个超时问题,而抄本对我帮助不大。所以我尝试了另一种方法,通过设置过滤器;

add_filter( \'http_request_timeout\', \'wp9838c_timeout_extend\' );

function wp9838c_timeout_extend( $time )
{
    // Default timeout is 5
    return 10;
}
我希望这可以成为将来其他人的另一个参考。

SO网友:Tom Auger

您可以直接在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秒,但在许多情况下,这将超过PHPmax_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\' );

结束

相关推荐

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谢谢你的回复