curl:从文件中读取标题

时间:2012-09-30 12:11:47

标签: curl

在--dump-header写入文件之后,如何将这些头读回到下一个请求中?我想从文件中读取它们,因为它们有很多。

我尝试过标准:cat headers | curl -v -H - ...

我实际上正在使用Firebug中的功能来“复制请求标头”,然后将它们保存到文件中。这似乎是相同的格式。

5 个答案:

答案 0 :(得分:49)

怎么样:

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

headers.txt看起来像

Header1: bla
Header2: blupp

在BASH工作。

答案 1 :(得分:24)

自卷曲7.55.0

易:

$ curl -H @header_file $URL

...其中头文件是纯文本文件,每行都有一个HTTP头。

在卷曲7.55.0之前

卷曲无法像这样“批量更改”标题,甚至也无法从文件中进行批量更改。

使用旧卷曲版本的最佳方法可能是编写一个shell脚本,从文件中收集所有头文件并使用它们,如:

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

像这样调用脚本:

$ sh script.sh < header_file

答案 2 :(得分:21)

从curl 7.55.0开始,它现在可以从文件读取标题:

curl -H @filename

现在很容易。

答案 3 :(得分:6)

正如@dmitry-sutyagin所述,如果您的curl至少是版本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/

答案 4 :(得分:5)

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