检查cURL请求
即使检查和调试cURL请求不是WordPress独有的事情,您也需要了解WP-HTTP-API内部的大部分内容才能绕过它。我已经为自己编写了一个插件来实现这一点,我已经对其进行了修改/剥离并附加给您使用。它将在关闭挂钩中输出cURL对象的详细信息,无论是在管理UI中还是在前端/主题中。
你能做的就是使用完全相同的钩子http_api_curl
并捕捉cURL对象。然后将其保存到类变量中,将下一个调用附加到该类变量,然后继续。我自己以前没有做过这样的事情,但这应该是可行的。
编辑
由于此处的编辑数量有限,我将此插件的进一步开发移至
GitHub account. 如果您有注释、意见或建议,请在此处留言。
下面的插件功能齐全。GitHub上还有一个更高级的版本。
<?php
/**
* Plugin Name: (#81791) Dump cURL Request & Response
* Author: Franz Josef Kaiser
*/
add_action( \'plugins_loaded\', array( \'WPSE81791_cURL\', \'init\' ) );
class WPSE81791_cURL
{
protected static $instance;
public static $dump;
public static function init()
{
null === self :: $instance AND self :: $instance = new self;
return self :: $instance;
}
public function __construct()
{
add_action( \'http_api_curl\', array( $this, \'dump_curl\' ) );
add_action( \'shutdown\', array( $this, \'do_dump\' ) );
}
/**
* Debug the response in the middle.
* Catches the cURL object during the request.
* @param cURL $handle
* @return void
*/
public function dump_curl( &$handle )
{
curl_setopt( $handle, CURLINFO_HEADER_OUT, 1 );
curl_setopt( $handle, CURLOPT_HEADER, 0 );
curl_setopt( $handle, CURLOPT_HEADERFUNCTION, array( $this, \'dump_curl_buffer_cb\' ) );
curl_setopt( $handle, CURLOPT_WRITEFUNCTION, array( $this, \'dump_curl_buffer_cb\' ) );
curl_exec( $handle );
$this->add_dump(
curl_getinfo( $handle, CURLINFO_HEADER_OUT )
.$this->dump_curl_buffer_cb( null )
.\'<br />Nr. of Errors: \'.curl_errno( $handle )
.\'<br />Errors: \'.curl_error( $handle )
);
}
/**
* Callback for cURL dump method
* @param object $curl
* @param null $data
* @return int
*/
public function dump_curl_buffer_cb( $curl, $data = null )
{
static $buffer = \'\';
if ( is_null( $curl ) )
{
$r = $buffer;
$buffer = \'\';
return $r;
}
$buffer .= $data;
return strlen( $data );
}
/**
* Adds data to the static data stack
* @param
* @return void
*/
public function add_dump( $data )
{
self :: $dump[] = $data;
}
/**
* Dumps the data stack for debug
* @param
* @return void
*/
public function do_dump()
{
printf(
\'<pre>%s</pre>\'
,var_export( implode( "<br />", self :: $dump ), true )
);
}
}