meaning ejercicio ejemplo curl

ejercicio - Cómo mostrar los encabezados de solicitud con la línea de comando curl



curl post (9)

Creo que el interruptor de línea de comando que está buscando para pasar a curl es -I .

Ejemplo de uso:

$ curl -I http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287 HTTP/1.1 301 Moved Permanently Date: Sat, 29 Dec 2012 15:22:05 GMT Server: Apache Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/ Content-Type: text/html; charset=iso-8859-1

Además, si encuentra un código de estado HTTP de respuesta de 301, también le gustaría pasar un -L argumento -L para decirle a curl que siga los redireccionamientos de URL y, en este caso, imprima los encabezados de todas las páginas (incluidos los redireccionamientos de URL) , ilustrado abajo:

$ curl -I -L http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287 HTTP/1.1 301 Moved Permanently Date: Sat, 29 Dec 2012 15:22:13 GMT Server: Apache Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/ Content-Type: text/html; charset=iso-8859-1 HTTP/1.1 302 Found Date: Sat, 29 Dec 2012 15:22:13 GMT Server: Apache Set-Cookie: UID=b8c37e33defde51cf91e1e03e51657da Location: noaccess.php Content-Type: text/html HTTP/1.1 200 OK Date: Sat, 29 Dec 2012 15:22:13 GMT Server: Apache Content-Type: text/html

La línea de comando curl puede mostrar el encabezado de respuesta usando la opción -D , pero quiero ver qué encabezado de solicitud está enviando. ¿Cómo puedo hacer eso?


La opción -v o --verbose curl muestra los encabezados de solicitud HTTP, entre otras cosas. Aquí hay algunos resultados de muestra:

$ curl -v http://google.com/ * About to connect() to google.com port 80 (#0) * Trying 66.102.7.104... connected * Connected to google.com (66.102.7.104) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.16.4 (i386-apple-darwin9.0) libcurl/7.16.4 OpenSSL/0.9.7l zlib/1.2.3 > Host: google.com > Accept: */* > < HTTP/1.1 301 Moved Permanently < Location: http://www.google.com/ < Content-Type: text/html; charset=UTF-8 < Date: Thu, 15 Jul 2010 06:06:52 GMT < Expires: Sat, 14 Aug 2010 06:06:52 GMT < Cache-Control: public, max-age=2592000 < Server: gws < Content-Length: 219 < X-XSS-Protection: 1; mode=block < <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML> * Connection #0 to host google.com left intact * Closing connection #0


La opción verbosa es útil, pero si desea ver todo lo que hace curl (incluido el cuerpo HTTP que se transmite, y no solo los encabezados), sugiero usar una de las siguientes opciones:

  • --trace-ascii - # stdout
  • --trace-ascii output_file.txt # file

Obtienes una salida de encabezado agradable con el siguiente comando:

curl -L -v -s -o /dev/null google.de

  • -L, --location sigue redirecciones
  • -v, --verbose más salida, indica la dirección
  • -s, --silent no muestra una barra de progreso
  • -o, --output /dev/null no muestra el cuerpo recibido

O la versión más corta:

curl -Lvso /dev/null google.de

Resultados en:

* Rebuilt URL to: google.de/ * Trying 2a00:1450:4008:802::2003... * Connected to google.de (2a00:1450:4008:802::2003) port 80 (#0) > GET / HTTP/1.1 > Host: google.de > User-Agent: curl/7.43.0 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Location: http://www.google.de/ < Content-Type: text/html; charset=UTF-8 < Date: Fri, 12 Aug 2016 15:45:36 GMT < Expires: Sun, 11 Sep 2016 15:45:36 GMT < Cache-Control: public, max-age=2592000 < Server: gws < Content-Length: 218 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < * Ignoring the response-body { [218 bytes data] * Connection #0 to host google.de left intact * Issue another request to this URL: ''http://www.google.de/'' * Trying 2a00:1450:4008:800::2003... * Connected to www.google.de (2a00:1450:4008:800::2003) port 80 (#1) > GET / HTTP/1.1 > Host: www.google.de > User-Agent: curl/7.43.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Fri, 12 Aug 2016 15:45:36 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=ISO-8859-1 < P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info." < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < Set-Cookie: NID=84=Z0WT_INFoDbf_0FIe_uHqzL9mf3DMSQs0mHyTEDAQOGY2sOrQaKVgN2domEw8frXvo4I3x3QVLqCH340HME3t1-6gNu8R-ArecuaneSURXNxSXYMhW2kBIE8Duty-_w7; expires=Sat, 11-Feb-2017 15:45:36 GMT; path=/; domain=.google.de; HttpOnly < Accept-Ranges: none < Vary: Accept-Encoding < Transfer-Encoding: chunked < { [11080 bytes data] * Connection #1 to host www.google.de left intact

Como puede ver, las salidas de curl , tanto las de salida como las de entrada, omiten los datos del cuerpo, aunque le indican qué tan grande es el cuerpo.

Además, para cada línea, la dirección se indica de modo que sea fácil de leer. Me pareció particularmente útil rastrear largas cadenas de redirecciones.


Si desea más alternativas, puede intentar instalar un cliente HTTP moderno de línea de comandos como httpie que está disponible para la mayoría de los sistemas operativos con gestores de paquetes como brew, apt-get, pip, yum, etc.

por ejemplo: - para OSX

brew install httpie

Luego puedes use en la línea de comandos con varias opciones.

http GET https://www.google.com


Tuve que superar este problema yo mismo, al depurar aplicaciones web. -v es genial, pero un poco demasiado detallado para mi gusto. Esta es la solución (solo bash) que se me ocurrió:

curl -v http://example.com/ 2> >(sed ''/^*/d'')

Esto funciona porque la salida de -v se envía a stderr, no a stdout. Al redirigir esto a una subshell, podemos crear sed para eliminar las líneas que comienzan con * . Dado que la salida real no pasa a través de la subshell, no se ve afectada. El uso de un subshell es un poco torpe, pero es la forma más fácil de redirigir stderr a otro comando. (Como señalé, solo uso esto para las pruebas, por lo que funciona bien para mí).


en php set curl options

CURLINFO_HEADER_OUT => true,

CURLOPT_HEADER => 1,

y tal vez volcar el resultado del encabezado en mysql .. para un registro más fácil.

También puede usar wireshark si usa el navegador para obtener información más detallada que la que ofrece F12 / Firebug


la opción -v para curl es demasiado detallada en la salida de error que contiene el * (línea de estado) o > (campo de encabezado de solicitud) o < (campo de encabezado de respuesta). para obtener solo el campo de encabezado de solicitud:

curl -v -sS www..com 2>&1 >/dev/null | grep ''>'' | cut -c1-2 --complement

para obtener solo el campo de encabezado de solicitud:

curl -v -sS www..com 2>&1 >/dev/null | grep ''<'' | cut -c1-2 --complement

o para /tmp/test.txt en el archivo /tmp/test.txt con la opción -D

curl -D /tmp/test.txt -sS www..com > /dev/null

para filtrar la salida -v , debe dirigir la salida de error al terminal y la salida estándar a / dev / null, la opción -s es prohibir la medición de progreso


curl -sD - -o /dev/null http://example.com

  • -s - Evita mostrar la barra de progreso
  • -D - - Volcar encabezados a un archivo, pero - envía a la salida estándar
  • -o /dev/null - Ignora el cuerpo de respuesta

Esto es mejor que -I ya que no envía una solicitud HEAD , que puede producir resultados diferentes.

Es mejor que -v porque no necesitas tantos hacks para deshacerlo.