2012-09-30 80 views
15

在--dump-header寫入文件後,如何將這些頭文件讀回到下一個請求中?我想從一個文件中讀取它們,因爲它們中有很多。curl:從文件中讀取頭文件

我試過標準:cat headers | curl -v -H - ...

我實際使用功能的螢火蟲「複製要求標頭」,然後保存那些文件。這看起來是相同的格式。

回答

12

curl沒有辦法「批量更改」這樣的頭文件,甚至沒有文件。

你最好的辦法可能是,而不是編寫收集所有的頭從文件shell腳本,並使用它們,如:

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

調用這樣的腳本:

$ sh script.sh < header_file 
36

如何這一點:

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

其中headers.txt看起來像

Header1: bla 
Header2: blupp 

在BASH工作。

+0

工程在捲曲7.22.0。我添加了一個空間,所以它會是'bla bla',我無法將它絆倒。這個命令很容易用'curl -v -H「$(cat headers.txt)」google.com'測試..讓我們看看是否有其他人評論,以確保這是一個安全的方式來做到這一點。它沒有記錄。 – jcalfee314

+0

我之前明確地去除了'-v',因爲我認爲它是沒有添加到正確答案的噪聲,但是你是對的,它更容易。所以我把它加回 –

+2

但它的作用或多或少是巧合的,因爲它將它作爲帶有嵌入換行符的單個標題進行輸入。恕我直言,一個更清潔的版本將在header.txt文件的每一行上都有一個-H,並將它從命令行中刪除。 –

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

,捲曲7.55.0開始,現在可以從文件中讀取頭:

curl -H @filename 

現在就是這麼簡單。

0

正如@dmitry-sutyagin回答,如果你的捲髮是至少版本7.55.0可以使用@符號來從文件中讀取頭:

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

如果你的捲髮是不是7.55.0或較新的,有一個有用的黑客:

  • 使用的選項-K/--config <config file>,並把幾個-H/--header <header>線路中的文本文件。

例如:

  1. curl --dump-header foo.txt https://www.google.com/
  2. 如果有必要,dos2unix foo.txt
  3. 將文件轉換爲-H 'header'線,手動或使用腳本:

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

    這可能輸出例如:

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