2012-09-30 18 views
15

Después de que --dump-header escribe un archivo, ¿cómo leer los encabezados en la siguiente solicitud? Me gustaría leerlos de un archivo porque hay varios.curl: leer los encabezados del archivo

me trataron estándar en: cat headers | curl -v -H - ...

En realidad estoy usando la función de Firebug para "Copiar Encabezados de solicitud" y luego guardar los en un archivo. Este parece ser el mismo formato.

Respuesta

12

curl no tiene forma de encabezados de "cambio masivo" como ese, ni siquiera desde un archivo.

Su mejor enfoque es, probablemente, a su lugar escribir un script de shell que reúne todas las cabeceras del archivo y el uso de ellos, como:

#!/bin/sh 
while read line; do 
    args="$args -H '$line'"; 
done 
curl $args $URL 

invocar el script como el siguiente:

$ sh script.sh < header_file 
36

cómo en esto:

curl -v -H "$(cat headers.txt)" yourhost.com 

donde headers.txt parece

Header1: bla 
Header2: blupp 

trabaja en BASH.

+0

Obras en rizo 7.22.0.Agregué un espacio para que fuera 'bla bla' y no pude desconectarlo. Este comando fue esier para probar con 'curl -v -H" $ (cat headers.txt) "google.com' ... Veamos si alguien más comenta para asegurarse de que esta sea una manera segura de hacerlo. No está documentado. – jcalfee314

+0

Expliqué explícitamente el '-v' antes, ya que pensé que el ruido no está agregando una respuesta correcta, pero tienes razón, es más fácil. así que lo agregué de nuevo –

+2

Pero funciona más o menos por coincidencia ya que lo alimenta como un único encabezado con líneas nuevas incorporadas. En mi humilde opinión, una versión más limpia tendría una -H en cada línea en el archivo headers.txt y déjalo fuera de la línea de comando. –

3
curl $(xargs -a headers.txt printf "-H '%s'") example.org 
12

A partir de rizo 7.55.0 ahora puede leer los encabezados de un archivo:

curl -H @filename 

Es así de fácil ahora.

0

Como contestada por @dmitry-sutyagin, si el rizo es al menos la versión 7.55.0 se puede utilizar la notación @ para leer los encabezados de un archivo:

curl -H @headerfile.txt https://www.google.com/ # requires curl 7.55.0 

Si el rizo no es 7.55.0 o más reciente, hay un truco útil:

  • Utilice la opción -K/--config <config file>, y poner varios -H/--header <header> líneas en el archivo de texto.

Por ejemplo:

  1. curl --dump-header foo.txt https://www.google.com/
  2. Si es necesario, dos2unix foo.txt
  3. Convertir el archivo a -H 'header' líneas, de forma manual o con un script:

    cat foo.txt | 
        awk '$1 == "Set-Cookie:"' | 
        perl -ne "chomp; next if /^\\s*\$/; if (/'/) { warn; next } print \"-H '\$_'\\n\";" | 
        tee headerfile.txt 
    

    Este resultado puede algo como:

    -H 'Set-Cookie: 1P_JAR=2018-02-13-08; [...]' 
    -H 'Set-Cookie: NID=123=n7vY1W8IDElvf [...]' 
    
  4. curl --config headerfile.txt https://www.google.com/

Cuestiones relacionadas