Error inesperado de HTTP durante la solicitud de la API

2

Acabo de hacer una instalación limpia de Wordpress. Pero tengo un problema cuando instalo o uso la API de WordPress. Así que envíame un letrero

  

Se produjo un error HTTP inesperado durante la solicitud de la API.

Lo extraño es que he mirado por todas partes. Y las soluciones no funcionan para mí porponen Wordpress 3.2.1 y no saben cómo resolver el problema

    
pregunta AlejoNext 19.09.2011 - 09:12

3 respuestas

3

Utilice la siguiente función para depurar la solicitud de la API HTTP, conocerá la razón real por la que la solicitud de la API HTTP está fallando.

Pegue el siguiente código en function.php de su tema.

function dump_http_response( $response, $type, $transport, $args, $url ) {
    if ( is_admin() && $type == "response" )  {
        echo '<span style="color: #f00;">';
        var_dump( $response );
        echo '</span>';
    }
}
add_action( 'http_api_debug', 'dump_http_response', 1, 5 );
    
respondido por el Hameedullah Khan 19.09.2011 - 09:48
1

Esta secuencia de comandos le ofrece una visión general del tipo de sistema de archivos permitido / instalado en su servidor. Los primeros tres métodos son los métodos preferidos por WordPress y WordPress puede ser obligado a usar uno de ellos definiendo FS_METHOD en el wp-config.php .

Copie el código en un archivo, cárguelo en su servidor, compruebe qué métodos de sistema de archivos están permitidos / instalados y elimine el archivo lo antes posible.

<?php
$yes = '<span style="color:green; font-weight:bold">:)</span>';
$no  = '<span style="color:red; font-weight:bold">:(</span>';
$items = array();

$items['fopen'][0] = 'Opening urls via fopen (for FS_METHOD "direct")';
$items['fopen'][1] = ( TRUE == ini_get( 'allow_url_fopen' ) ) ?
    ' is allowed '.$yes : ' is not allowed '.$no;

$items['ssh2'][0] = 'SSH2 (for FS_METHOD "ssh")';
$items['ssh2'][1] = ( TRUE === extension_loaded( 'ssh2' ) ) ?
    ' is installed '.$yes : ' is not installed '.$no;

$items['ftp'][0] = 'FTP (for FS_METHOD "ftpext")';
$items['ftp'][1] = ( TRUE === extension_loaded( 'ftp' ) ) ?
    ' is installed '.$yes : ' is not installed '.$no;

$items['sockets'][0] = 'Sockets (for FS_METHOD "ftpsockets")';
$items['sockets'][1] = ( TRUE === extension_loaded( 'sockets' ) ) ?
    ' are installed '.$yes : ' are not installed '.$no;

$items['curl'][0] = 'Curl';
$items['curl'][1] = ( TRUE === extension_loaded( 'curl' ) ) ?
    ' is installed '.$yes : ' is not installed '.$no;

echo '<html>';
echo '<ol>';

foreach ( $items as $item ) {
    printf( '<li>%s%s</li>', $item[0], $item[1] );
}

echo '</ol>';
echo '</html>';

Puedes intentar forzar a WordPress a usar un método de sistema de archivos definiéndolo en tu wp-config.php , por ejemplo. para usar la extensión ftp php en lugar de fopen :

if ( ! defined( 'FS_METHOD' )
  define( 'FS_METHOD', 'ftpext' );

Esto podría ser útil si tienes problemas con el uso de un método de sistema de archivos y quieres usar otro.

    
respondido por el Ralf912 21.01.2013 - 04:37
1

La "API de WordPress" es bastante vaga (WP tiene múltiples API). Pero por tu error parece que es un problema de la API HTTP. Hay múltiples obstáculos posibles:

Problemas con el certificado SSL

Si tiene un problema con su certificado SSL (necesario cuando el servidor es un subdominio del sitio listado en el certificado SSL; usando un certificado de comodín obvia la necesidad de esto).

Como se señaló en los comentarios, el problema también podría ser que su servidor no está actualizado o falta certificados raíz de CA de SSL .

Problemas de solicitud (la API HTTP de WP no responde 200/OK )

¿Crees que no tienes cURL disponible y el fsocketopen fallback no funcionó?

Primero desea comprobar si la respuesta funciona. Para esta tarea, puedes usar dos servicios (donde ambos te dicen detalles ligeramente diferentes):

Luego, como @HameedullahKhan señaló en su respuesta, hay un filtro de depuración para la API HTTP de WP. Este filtro se ejecuta en el último punto absoluto de cualquier solicitud, justo antes de devolverlo al desarrollador.

<?php
/** Plugin Name: (#28871) Debug WP HTTP API response */
add_action( 'http_api_debug', 'wpse28871_debug_request', 999, 5 );
function wpse28871_debug_request( $response, $type, $class, $args, $url )
{
    printf( '<pre>ResponseData: %s', is_wp_error( $response ) 
        ? $response->get_error_code().' '.$response->get_error_message()
        : $response
    );
    printf( '<br />ResponseType: %s',      $type );
    printf( '<br />ResponseClass: %s',     $class );
    printf( '<br />ResponseArgs: %s',      $args );
    printf( '<br />ResponseURl: %s</pre>', $url );
    # @TODO Uncomment to exit when debugging AJAX requests
    # exit();
}

Si lo anterior no le proporciona ninguna información, aún puede intentar depurar el objeto cURL justo después de que se construyó y justo antes de que se activara. Esta forma es bastante desconocida, pero tiene enormes poderes cuando lo combinas con el complemento anterior: te dice si la solicitud tiene un problema con los argumentos de la CURL o si falla más tarde, reduciendo el rango de posibles problemas bastante rápido.

<?php
/* Plugin Name: (#28871) Debug WP HTTP API cURL arguments */
add_action( 'http_api_curl', 'wpse28871_curl_debug' );
function wpse28871_curl_debug( $handle )
{
    printf(
         '<pre>%s</pre>'
        ,var_export( curl_getinfo( $handle, CURLINFO_HEADER_OUT ), true ) )
    );
}
    
respondido por el kaiser 19.01.2013 - 11:52

Lea otras preguntas en las etiquetas