PHP - Depuración de Curl

Resuelto Matthew asked hace 54 años • 8 respuestas

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

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

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

¿Ideas sobre cómo ver qué campos de publicación se envían?

Matthew avatar Jan 01 '70 08:01 Matthew
Aceptado

Puede habilitar la CURLOPT_VERBOSEopción Curl , PHP 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($curlHandle, CURLOPT_VERBOSE, true);

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

Luego puedes leerlo después de que curl haya realizado la solicitud:

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

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

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

(Originalmente respondí algo similar pero más extenso 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 incluiría en una función:

$version = curl_version();
extract(curl_getinfo($curlHandle));
$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;
hakre avatar Jan 21 '2013 10:01 hakre

Puedes habilitar la CURLOPT_VERBOSEopción:

curl_setopt($curlhandle, CURLOPT_VERBOSE, true);

Cuando CURLOPT_VERBOSEestá configurado, la salida se escribe en STDERR o en el archivo especificado usando CURLOPT_STDERR. El resultado es muy informativo.

También puede utilizar tcpdump o wireshark para observar el tráfico de la red.

netom avatar Sep 21 '2010 12:09 netom

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

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

donde $fp es un identificador de archivo para generar errores. Por ejemplo:

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

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

Mario S avatar Oct 28 '2014 15:10 Mario S

Aquí hay una forma aún más sencilla: escribir directamente en la salida de error de PHP

curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w'));
Michaël R avatar Feb 12 '2016 13:02 Michaël R