Php-Depuración de Curl


Me gustaría ver cuáles son los campos post en la solicitud antes de enviarla. (Para fines de depuración).

La biblioteca php (clase) que estoy usando ya está hecha (no por mí), así que estoy tratando de entenderla.

Por lo que puedo decir, usa curl_setopt() para establecer diferentes opciones como encabezados y demás y luego usa curl_exec() para enviar la solicitud.

Ideas sobre cómo ver qué campos de post se están enviando?

Author: Matthew, 2010-09-21

5 answers

Puede activar la opción CURLOPT_VERBOSE:

curl_setopt($curlhandle, CURLOPT_VERBOSE, true);

Cuando se establece CURLOPT_VERBOSE, la salida se escribe en STDERR o en el archivo especificado usando CURLOPT_STDERR. La salida es muy informativa.

También puede usar tcpdump o wireshark para ver el tráfico de red.

 127
Author: netom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-28 23:14:04

Puede habilitar la opción CURLOPT_VERBOSE y registrar esa información en un (temporal) CURLOPT_STDERR:

// CURLOPT_VERBOSE: TRUE to output verbose information. Writes output to STDERR, 
// or the file specified using CURLOPT_STDERR.
curl_setopt($handle, CURLOPT_VERBOSE, true);

$verbose = fopen('php://temp', 'w+');
curl_setopt($handle, CURLOPT_STDERR, $verbose);

Puedes leerlo después de que curl haya hecho la petición:

$result = curl_exec($handle);
if ($result === FALSE) {
    printf("cUrl error (#%d): %s<br>\n", curl_errno($handle),
           htmlspecialchars(curl_error($handle)));
}

rewind($verbose);
$verboseLog = stream_get_contents($verbose);

echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";

(Originalmente respondí de manera similar pero más extendida en una pregunta relacionada.)

Más información como métricas sobre la última solicitud está disponible a través de curl_getinfo. Esta información también puede ser útil para depurar solicitudes curl. Un ejemplo de uso, normalmente lo envolvería en un función:

$version = curl_version();
extract(curl_getinfo($handle));
$metrics = <<<EOD
URL....: $url
Code...: $http_code ($redirect_count redirect(s) in $redirect_time secs)
Content: $content_type Size: $download_content_length (Own: $size_download) Filetime: $filetime
Time...: $total_time Start @ $starttransfer_time (DNS: $namelookup_time Connect: $connect_time Request: $pretransfer_time)
Speed..: Down: $speed_download (avg.) Up: $speed_upload (avg.)
Curl...: v{$version['version']}
EOD;
 338
Author: hakre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:59

Aquí hay un código más simple para el mismo:

   curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_STDERR, $fp);

Donde $fp es un controlador de archivo para generar errores. Por ejemplo:

   $fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');

(Siga leyendo http://curl.haxx.se/mail/curlphp-2008-03/0064.html )

 47
Author: Mario S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-16 15:14:17

Aquí hay una manera aún más simple, escribiendo directamente en php error output

curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w'));
 22
Author: Michaël R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-17 09:20:50

Para obtener la información de una solicitud de CURL, haga lo siguiente:

$response = curl_exec($ch);

$info = curl_getinfo($ch);
var_dump($info);
 13
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 11:25:22