Error de tiempo de espera con wp_remote_post exitoso

11 jul 2014, 08:15:50
Vistas: 19.2K
Votos: 7

Lo que estoy intentando hacer: Enviar datos POST usando wp_remote_post.

foreach ( $articles as $article_id ) {
    $postarray = array(
    'method'        => 'POST',
    'timeout'       => 5, // Tiempo de espera en segundos
    '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 {
        // el resto de mi código aquí
    }
}

Estoy trabajando con 20+ artículos por llamada. Cada vez que termina el ciclo, obtengo este mensaje de error:

"Operation timed out after 5001 milliseconds with 0 bytes received"

Lo extraño es que los datos en realidad se reciben y almacenan correctamente en el servidor designado ($url).

¿Alguien puede indicarme la dirección correcta, dónde debería buscar para evitar ese mensaje de error?

Referencia: wp_remote_post

0
Todas las respuestas a la pregunta 2
1
13

Puedes establecer el tiempo de espera directamente en los $args de wp_remote_post(), como en este ejemplo de 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 "Algo salió mal: $error_message";
} else {
    echo 'Respuesta:<pre>';
    print_r( $response );
    echo '</pre>';
}

Otra cosa a tener en cuenta: en este ejemplo, el tiempo de espera es de 45 segundos, pero en muchos casos, eso excederá el límite de tiempo max_execution_time de PHP, por lo que aún obtendrás un error, pero esta vez, un error fatal de PHP (500) en lugar del error HTTP devuelto por WordPress (¡así que en realidad estás peor!).

Esto se puede solucionar configurando max_execution_time en tu php.ini o, si no estás ejecutando en safe_mode (poco probable en un servidor de producción), puedes intentar establecerlo programáticamente dentro de tu código, como en el ejemplo a continuación:

$timeout = 45;
if ( ! ini_get( 'safe_mode' ) ){
    set_time_limit( $timeout + 10 );
}

$response = wp_remote_post( $url, array(
    'timeout' => $timeout
) );

Aquí, establezco el tiempo de espera de PHP en 10 segundos más que el tiempo de espera HTTP, solo para estar seguro.

Además, sería una buena práctica restablecer el tiempo de espera a su valor original, que probablemente sea el valor devuelto por ini_get( 'max_execution_time' );

16 may 2016 20:06:11
Comentarios

Pregunta, respecto al max_execution_time, ¿sabes cuál sería la cantidad predeterminada para WordPress? O mejor aún, ¿dónde podría encontrar esta configuración?

wlh wlh
29 ene 2019 17:43:49
2

Después de bastante tiempo con el mensaje de error molestando en mi pantalla, encontré una forma de solucionarlo.

Sí, es un problema de tiempo de espera, y el codex no me ayudó mucho. Así que probé otro enfoque, estableciendo un filtro:

add_filter( 'http_request_timeout', 'wp9838c_timeout_extend' );

function wp9838c_timeout_extend( $time )
{
    // El tiempo de espera predeterminado es 5
    return 10;
}

Espero que esto pueda servir como referencia para alguien más en el futuro.

30 oct 2014 08:09:55
Comentarios

Siempre es genial cuando encuentras una solución por ti mismo :-). Muchas gracias por compartir tu solución. Solo recuerda volver una vez que se levanten las restricciones y aceptar tu propia respuesta.

Pieter Goosen Pieter Goosen
30 oct 2014 08:15:45

Regresé en cuanto recibí la notificación por correo. Gracias por tu orientación, @PieterGoosen

Nich Nich
30 oct 2014 14:08:13