API请求过程中出现意外的HTTP错误

时间:2011-09-19 作者:AlejoNext

我刚刚彻底安装了Wordpress。但是我在安装或使用WordPress API时遇到了一个问题。给我发个信号

API请求期间发生意外的HTTP错误。

奇怪的是,我到处都找过了。这些解决方案对我来说并不适用porponen Wordpress 3.2.1,也不知道如何解决这个问题

3 个回复
SO网友:Hameedullah Khan

使用以下函数调试HTTP API请求,您将了解HTTP API请求失败的实际原因。

在主题函数中粘贴以下代码。php。

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

SO网友:kaiser

“WordPress API”非常模糊(WP有多个API)。但从您的错误来看,这似乎是一个HTTP API问题。可能存在多个障碍:

SSL证书问题

If you got a problem with your SSL certificate (当服务器是SSL证书中列出的站点的子域时需要;使用wildcard certificate 无需这样做)。

正如评论中指出的,问题还可能是您的服务器已过期或丢失SSL CA root certificates.

请求问题(WP HTTP API未响应200/OK)cURL 可用和fsocketopen 后备方案没有奏效?

首先,您要检查响应是否有效。对于此任务,您可以使用两个服务(它们都告诉您略有不同的详细信息):

  • HTTPstatus.nl
  • RedBot

    <?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();
    }
    
    如果上面的内容不能提供任何见解,那么您仍然可以在构建cURL对象之后和启动之前调试它。这种方式还不太清楚,但当您将其与上述插件结合使用时,它有着巨大的威力:它会告诉您请求是否与cURL参数有问题,或者稍后是否失败,从而快速缩小可能出现问题的范围。

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

SO网友:Ralf912

此脚本大致概述了服务器上允许/安装的文件系统方法。前三种方法是WordPress首选的方法,WordPress可以通过定义FS_METHODwp-config.php.

将代码复制到文件中,将文件上载到服务器,检查允许/安装哪些文件系统方法,并尽快删除该文件。

<?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>\';
您可以通过在wp-config.php, e、 g.使用php ftp扩展,而不是fopen:

if ( ! defined( \'FS_METHOD\' )
  define( \'FS_METHOD\', \'ftpext\' );
如果您在使用文件系统方法时遇到问题,并且希望使用另一种方法,这可能会很有帮助。

结束

相关推荐

如何控制对HTTP API请求的接受编码?

与相关this ticket about issues with inflating data.到目前为止,API的支持人员建议request gzip instead of deflate.然而,我找不到一种方法来覆盖WP设置,该设置将deflate设置为所有请求的最高优先级,作为可接受的编码。相关职能-WP_Http_Encoding::is_available() 和WP_Http_Encoding::accept_encoding().是否有任何钩子或其他选项来控制我丢失的这个?