2012-09-30 13 views
15

Dopo che l'intestazione --dump scrive un file, come si leggono queste intestazioni nella successiva richiesta? Mi piacerebbe leggerli da un file perché ce ne sono molti.arricciatura: leggere le intestazioni dal file

ho provato standard: cat headers | curl -v -H - ...

realtà sto usando la funzione di Firebug a "intestazioni di richiesta di copia" e quindi salvare quelli in un file. Questo sembra essere lo stesso formato.

risposta

12

arricciatura non ha modo di "modificare in massa" le intestazioni in quel modo, nemmeno da un file.

Il tuo approccio migliore è probabilmente di scrivere invece uno script di shell che raccoglie tutte le intestazioni dal file e li usa, come:

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

richiamare lo script come questo:

$ sh script.sh < header_file 
36

come su questo:

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

dove headers.txt assomiglia

Header1: bla 
Header2: blupp 

funziona in BASH.

+0

Lavori in ricciolo 7.22.0.Ho aggiunto uno spazio in modo che fosse 'bla bla' e non potevo inciampare. Questo comando è stato necessario testare con 'curl -v -H" $ (cat headers.txt) "google.com'. Consente di vedere se qualcun altro commenta per assicurarsi che questo sia un modo sicuro per farlo. Non è documentato – jcalfee314

+0

Ho rimosso esplicitamente il '-v' prima poiché pensavo che fosse un rumore che non aggiungeva una risposta corretta, ma hai ragione, è più facile. quindi l'ho riaggiunto –

+2

Ma funziona più o meno per coincidenza poiché lo alimenta come singola intestazione con nuove linee incorporate. IMHO, una versione più pulita avrebbe un -H su ogni riga nel file headers.txt e lo lascerà fuori dalla riga di comando. –

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

partire con l'arricciatura 7.55.0 si può ora leggere le intestazioni da un file:

curl -H @filename 

E 'così facile ora.

0

Come risposto da @dmitry-sutyagin, se il ricciolo è almeno la versione 7.55.0 è possibile utilizzare la notazione @ di leggere le intestazioni da un file:

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

Se la vostra arricciatura NON è 7.55.0 o più nuovo, c'è un hack utile:

  • Utilizzare l'opzione -K/--config <config file>, e mettere diversi -H/--header <header> righe nel file di testo.

Per esempio:

  1. curl --dump-header foo.txt https://www.google.com/
  2. Se necessario, dos2unix foo.txt
  3. Convertire il file in -H 'header' linee, manualmente o con uno script:

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

    Questa uscita potrebbe qualcosa come:

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

Problemi correlati