48

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

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

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

4

5 回答 5

74

自卷曲 7.55.0

简单的:

$ curl -H @header_file $URL

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

Color: red
Shoesize: 11
Secret: yes
User-Agent: foobar/3000
Name: "Joe Smith"

在 curl 7.55.0 之前

curl 无法像那样“批量更改”标题,甚至无法从文件中。

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

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

像这样调用脚本:

$ sh script.sh < header_file
于 2012-10-02T10:56:16.460 回答
60

这个怎么样:

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

headers.txt看起来像哪里

Header1: bla
Header2: blupp

在 BASH 中工作。

于 2014-08-06T08:10:27.367 回答
27

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

curl -H @filename

现在就这么容易。

于 2017-10-15T21:15:37.410 回答
11

正如@dmitry-sutyagin所回答的那样,如果您的 curl 至少是 7.55.0 版本,您可以使用该@符号从文件中读取标题:

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

如果您的 curl 不是 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/

于 2018-02-13T08:39:15.073 回答
5
curl $(xargs -a headers.txt printf "-H '%s'") example.org
于 2015-12-24T01:16:35.310 回答