PHP - Depuración de Curl
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?
Puede habilitar la CURLOPT_VERBOSE
opció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;
Puedes habilitar la CURLOPT_VERBOSE
opción:
curl_setopt($curlhandle, CURLOPT_VERBOSE, true);
Cuando CURLOPT_VERBOSE
está 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.
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 )
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'));