Quiere acceder a la respuesta de wp_remote_post

2 minutos de lectura

avatar de usuario
piush

Estoy llamando a api usando el método wp_remote_post(). Obtengo la siguiente respuesta de api

  Array
(
    [headers] => Array
        (
            [cache-control] => no-cache
            [pragma] => no-cache
            [content-length] => 100
            [content-type] => application/json
            [content-encoding] => deflate
            [expires] => -1
            [server] => Microsoft-IIS/8.5
            [x-aspnet-version] => 4.0.30319
            2022 => Fri, 27 May 2016 12:47:01 GMT
            [connection] => close
        )

    [body] => {"ResponseStatus":false,"ResponseData":null,"ErrorData":{"ErrorCode":"E0002","Error":"Email already registered.","ErrorDetail":"Email already registered."}}
    [response] => Array
        (
            [code] => 200
            [message] => OK
        )

    [cookies] => Array
        (
        )

    [filename] => 
)

Quiero acceder a todas las propiedades del objeto anterior

Estoy tratando de acceder usando el siguiente código

$res->ResponseStatus;

pero no imprime nada.

  • Esa es una respuesta realmente extraña… ¿Estás seguro de que esa es la respuesta que estás recibiendo?

    – rnevio

    27 mayo 2016 a las 13:13

  • estoy recibiendo una respuesta completa como a continuación

    – piush

    27 de mayo de 2016 a las 13:16

  • ¿Qué pasa con json_decode ($ respuesta[‘body’]); ?

    – jiboulex

    27 mayo 2016 a las 13:21

  • después de decodificar, devuelve el objeto como “object(stdClass)#575 (3) { [“ResponseStatus”]=> booleano(falso) [“ResponseData”]=> NULO [“ErrorData”]=> objeto (clase estándar) # 576 (3) { [“ErrorCode”]=> cadena(5) “E0002” [“Error”]=> string(25) “Email ya registrado.” [“ErrorDetail”]=> string(25) “Email ya registrado.” } }”

    – piush

    30 de mayo de 2016 a las 5:29

  • luego haz $responseBody = json_decode($response[‘body’]); y luego puede usar $responseBody->ResponseStatus

    – jiboulex

    30 de mayo de 2016 a las 10:07

$request = wp_remote_post( $url, array( 'body' => $args ) );

if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {
    return false;
}
$response = unserialize( wp_remote_retrieve_body( $request ) );

  • Deberías usar json_decode ya que el cuerpo de la respuesta es una cadena json. El uso de unserialize puede hacer que el código se cargue y ejecute debido a la creación de instancias y la carga automática de objetos, y un usuario malintencionado puede aprovechar esto.

    – muhammed

    8 de agosto de 2020 a las 16:11

¿Ha sido útil esta solución?