it-swarm.com.de

Während der API-Anforderung ist ein unerwarteter HTTP-Fehler aufgetreten

Ich habe gerade eine Neuinstallation von Wordpress durchgeführt. Aber ich habe ein Problem, wenn ich die WordPress-API installiere oder verwende. Also sende mir ein Zeichen

Während der API-Anforderung ist ein unerwarteter HTTP-Fehler aufgetreten.

Das Seltsame ist, dass ich überall gesucht habe. Und die Lösungen funktionieren bei mir nicht porponen Wordpress 3.2.1 und wissen nicht, wie man das Problem löst

2
AlejoNext

Verwenden Sie die folgende Funktion, um die HTTP-API-Anforderung zu debuggen. Sie erfahren, warum die HTTP-API-Anforderung tatsächlich fehlschlägt.

Füge den folgenden Code in die function.php deines Themas ein.

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 );
3

Dieses Skript gibt Ihnen einen groben Überblick darüber, welche Dateisystemmodi auf Ihrem Server zulässig/installiert sind. Die ersten drei Methoden sind die von WordPress bevorzugten Methoden, und WordPress kann gezwungen werden, eine davon zu verwenden, indem FS_METHOD im wp-config.php definiert wird.

Kopieren Sie den Code in eine Datei, laden Sie die Datei auf Ihren Server hoch, überprüfen Sie, welche Dateisystemmethoden zulässig/installiert sind, und löschen Sie die Datei so schnell wie möglich.

<?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>';

Sie können versuchen, WordPress zur Verwendung einer Dateisystemmethode zu zwingen, indem Sie sie in Ihrem wp-config.php definieren, z. Um die PHP-FTP-Erweiterung anstelle von fopen zu verwenden:

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

Dies kann hilfreich sein, wenn Sie Probleme mit einer Dateisystemmethode haben und eine andere verwenden möchten.

1
Ralf912

Die "WordPress API" ist ziemlich vage (WP hat mehrere APIs). Aus Ihrem Fehler geht jedoch hervor, dass es sich um ein HTTP-API-Problem handelt. Es gibt mehrere mögliche Hindernisse:

Probleme mit dem SSL-Zertifikat

Wenn Sie ein Problem mit Ihrem SSL-Zertifikat haben (erforderlich, wenn der Server eine Unterdomäne der im SSL-Zertifikat aufgeführten Site ist; verwenden Sie ein Wildcard-Zertifikat macht dies überflüssig.

Wie in den Kommentaren erwähnt, besteht das Problem möglicherweise auch darin, dass auf Ihrem Server veraltete oder fehlende SSL-CA-Stammzertifikate vorhanden sind.

Anforderungsprobleme (WP HTTP API antwortet nicht 200/OK)

Sie glauben, dass cURL nicht verfügbar ist und der fsocketopen-Fallback nicht funktioniert hat?

Zuerst möchten Sie überprüfen, ob die Antwort funktioniert. Für diese Aufgabe können Sie zwei Dienste verwenden (wobei beide Ihnen leicht unterschiedliche Details mitteilen):

Dann, wie @HameedullahKhan in seiner Antwort betonte, gibt es einen Debug-Filter für die HTTP-API WP. Dieser Filter wird am absolut letzten Punkt einer Anfrage ausgeführt, unmittelbar bevor er an den Entwickler zurückgegeben wird.

<?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();
}

Wenn das oben Genannte keine Erkenntnisse liefert, können Sie dennoch versuchen, das cURL-Objekt direkt nach seiner Erstellung und unmittelbar vor seinem Auslösen zu debuggen. Dieser Weg ist ziemlich unbekannt, hat aber enorme Möglichkeiten, wenn Sie ihn mit dem obigen Plugin kombinieren: Er sagt Ihnen, ob die Anfrage ein Problem mit den cURL-Argumenten hat oder ob sie später fehlschlägt, wodurch der Bereich möglicher Probleme ziemlich schnell eingegrenzt wird.

<?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 ) )
    );
}
1
kaiser