Inspeccionando la solicitud cURL
Incluso si inspeccionar y depurar una solicitud de cURL no es algo exclusivo de WordPress, necesita conocer una buena parte de los elementos internos de la API HTTP de WP para evitarlo. Me he escrito un complemento para hacer eso por mí, que he modificado / simplificado y adjuntado para que lo use. Se mostrarán los detalles del objeto cURL en el gancho de apagado, tanto en la IU de administración como en el Front-End / Theme.
Lo que puedes hacer es usar exactamente el mismo gancho http_api_curl
y capturar el objeto cURL. Luego guárdelo en una variable de clase, adjunte sus próximas llamadas y continúe. No he hecho nada como esto antes, pero debería ser factible.
Editar
Como el número de ediciones aquí es limitado, trasladé el desarrollo adicional de este complemento a mi cuenta de GitHub . Si tiene notas, comentarios o sugerencias, deje un comentario allí.
El complemento a continuación es completamente funcional. Todavía hay una versión mucho más avanzada en 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 )
);
}
}