meaning español ejemplo curl

español - curl php



¿Cómo puedo ver los encabezados de solicitud hechos por curl al enviar una solicitud al servidor? (13)

Quiero ver los encabezados de solicitud hechos por curl cuando estoy enviando una solicitud al servidor. ¿Cómo puedo comprobar eso?


Aquí está mi cliente http en php para realizar consultas posteriores con cookies incluidas:

function http_login_client($url, $params = "", $cookies_send = "" ){ // Vars $cookies = array(); $headers = getallheaders(); // Perform a http post request to $ur1 using $params $ch = curl_init($url); $options = array( CURLOPT_POST => 1, CURLINFO_HEADER_OUT => true, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => 1, CURLOPT_HEADER => 1, CURLOPT_COOKIE => $cookies_send, CURLOPT_USERAGENT => $headers[''User-Agent''] ); curl_setopt_array($ch, $options); $response = curl_exec($ch);

/// DEBUG info echo $ response; var_dump (curl_getinfo ($ ch)); ///

// Parse response and read cookies preg_match_all(''/^Set-Cookie: (.*?)=(.*?);/m'', $response, $matches); // Build an array with cookies foreach( $matches[1] as $index => $cookie ) $cookies[$cookie] = $matches[2][$index]; return $cookies; } // end http_login_client


Creo que curl -v es lo más fácil. Escupirá los encabezados de solicitud (líneas con el prefijo ''>'') sin tener que escribir en un archivo:

$ curl -v -I -H "Testing: Test header so you see this works" http://.com/ * About to connect() to .com port 80 (#0) * Trying 69.59.196.211... connected * Connected to .com (69.59.196.211) port 80 (#0) > HEAD / HTTP/1.1 > User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS > Host: .com > Accept: */* > Testing: Test header so you see this works > < HTTP/1.0 200 OK ...



La única forma en que logré ver mis encabezados salientes (curl with php) fue mediante las siguientes opciones:

curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, true);

Obteniendo su información de depuración:

$data = curl_exec($ch); var_dump($data); var_dump(curl_getinfo($ch));


La opción --trace-ascii para curl mostrará los encabezados de solicitud, así como los encabezados de respuesta y el cuerpo de respuesta.

Por ejemplo, el comando

curl --trace-ascii curl.trace http://www.google.com/

produce un archivo curl.trace que comienza como sigue:

== Info: About to connect() to www.google.com port 80 (#0) == Info: Trying 209.85.229.104... == Info: connected == Info: Connected to www.google.com (209.85.229.104) port 80 (#0) => Send header, 145 bytes (0x91) 0000: GET / HTTP/1.1 0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 0050: OpenSSL/0.9.7l zlib/1.2.3 006c: Host: www.google.com 0082: Accept: */* 008f:

También obtuvo una respuesta (una respuesta 302, para ser precisa pero irrelevante) que se registró.

Si solo desea guardar los encabezados de respuesta , use la opción --dump-header :

curl -D file url curl --dump-header file url

Si necesita más información sobre las opciones disponibles, use curl --help | less curl --help | less (produce un par de cientos de líneas de salida pero menciona muchas opciones). O busque la página del manual donde haya más explicaciones de lo que significan las opciones.


La pregunta no especificó si el comando de la línea de comandos llamado curl se refería o la biblioteca cURL completa.

El siguiente código PHP que utiliza la biblioteca cURL utiliza el primer parámetro como método HTTP (por ejemplo, "GET", "POST", "OPCIONES") y el segundo parámetro como URL.

<?php $ch = curl_init(); $f = tmpfile(); # will be automatically removed after fclose() curl_setopt_array($ch, array( CURLOPT_CUSTOMREQUEST => $argv[1], CURLOPT_URL => $argv[2], CURLOPT_RETURNTRANSFER => 1, CURLOPT_FOLLOWLOCATION => 0, CURLOPT_VERBOSE => 1, CURLOPT_HEADER => 0, CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_TIMEOUT => 30, CURLOPT_STDERR => $f, )); $response = curl_exec($ch); fseek($f, 0); echo fread($f, 32*1024); # output up to 32 KB cURL verbose log fclose($f); curl_close($ch); echo $response;

Ejemplo de uso:

php curl-test.php OPTIONS https://google.com

Tenga en cuenta que los resultados son casi idénticos a los siguientes en la línea de comandos

curl -v -s -o - -X OPTIONS https://google.com


Probé las respuestas aquí y encontré que la más útil y fácil no está en la lista de respuestas todavía, pero sí:

curl -v https://example.com/path

Esto imprime los encabezados de SOLICITUD así como los encabezados de RESPUESTA más otros útiles como el certificado SSL y si una conexión TCP existente fue reutilizada. el indicador -v se puede combinar con otros indicadores, por supuesto, como seguir las redirecciones y solicitar la autenticación HTTP:

curl -vL --user my_username https://example.com/path

Espero que esto ayude.


Puede usar wireshark o tcpdump para buscar en cualquier tráfico de red (http también).


Puedes verlo usando -iv

$> curl -ivH "apikey:ad9ff3d36888957" --form "file=@/home/mar/workspace/images/8.jpg" --form "language=eng" --form "isOverlayRequired=true" https://api.ocr.space/Parse/Image


Sé que esto es un poco tarde, pero mi método favorito para hacer esto es netcat , ya que obtienes exactamente el curl enviado; esto puede diferir de las --trace o --trace-ascii que no muestran correctamente los caracteres que no son ASCII (solo se muestran como puntos o se deben decodificar).

Puede hacerlo muy fácilmente abriendo dos ventanas de terminal, en el primer tipo:

nc -l localhost 12345

Esto abre un proceso de escucha en el puerto 12345 de su máquina local.

En la segunda ventana de terminal ingrese su comando curl, por ejemplo:

curl --form ''foo=bar'' localhost:12345

En la primera ventana de terminal verá exactamente qué rizo se envió en la solicitud.

Ahora, por supuesto, nc no enviará nada en respuesta (a menos que lo escriba usted mismo), por lo que deberá interrumpir el comando curl (control-c) y repetir el proceso para cada prueba.

Sin embargo, esta es una opción útil para simplemente depurar su solicitud, ya que no implica un viaje de ida y vuelta a ninguna parte, ni genera solicitudes iterativas falsas en algún lugar hasta que lo haga correctamente; una vez que esté satisfecho con el comando, simplemente rediríjalo a una URL válida y listo.

También puede hacer lo mismo para cualquier biblioteca cURL, simplemente edite su solicitud para apuntar al oyente local de nc hasta que esté satisfecho con ella.


curl --trace-ascii {nombre de archivo} o use un solo guión en lugar del nombre de archivo para enviarlo a la --trace-ascii :

curl --trace-ascii - {URL}

CURLOPT_DEBUGFUNCTION si estás usando libcurl

Esto muestra todo lo que se envía y recibe el enrollamiento, con cierta información adicional introducida


volcar los encabezados en un archivo y la carga útil de la respuesta en un archivo diferente

curl -k -v -u user:pass "url" --trace-ascii headers.txt >> response.txt


curl -s -v -o/dev/null -H "Testheader: test" http://www.example.com

También puede usar la opción -I si desea enviar una solicitud HEAD y no una solicitud GET.