curl:从文件中读取标题

jca*_*314 26 curl

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

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

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

Cpt*_*uss 52

这个怎么样:

curl -v -H "$(cat headers.txt)" yourhost.com
Run Code Online (Sandbox Code Playgroud)

这里headers.txt看起来像

Header1: bla
Header2: blupp
Run Code Online (Sandbox Code Playgroud)

在BASH工作.

  • 但它或多或少地巧合,因为它将其作为带有嵌入换行符的单个标题提供.恕我直言,一个更干净的版本也会在headers.txt文件的每一行都有一个-H,并将其从命令行中删除. (2认同)
  • 这将起作用,但是,请记住,在进程列表中(例如“ps aux”),其他用户可能会看到扩展的变量。*SO*,如果您在标头中提供凭据或身份验证令牌,此方法会将凭据_暴露给其他用户 - 这是不可接受的。 (2认同)

Dan*_*erg 32

自卷曲7.55.0

简单:

$ curl -H @header_file $URL
Run Code Online (Sandbox Code Playgroud)

...头文件是纯文本文件,每行都有HTTP标头.

在卷曲7.55.0之前

curl无法像这样"批量更改"标题,甚至无法从文件中进行批量更改.

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

#!/bin/sh
while read line; do
  args="$args -H '$line'";
done
curl $args $URL
Run Code Online (Sandbox Code Playgroud)

像这样调用脚本:

$ sh script.sh < header_file
Run Code Online (Sandbox Code Playgroud)

  • 现在可见 https://curl.se/docs/manpage.html#-H =) (2认同)

Dmi*_*gin 22

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

curl -H @filename
Run Code Online (Sandbox Code Playgroud)

现在就这么简单.

  • 好的,但是语法是什么?'header':'info' "header":"info" header:info 或其他组合?我似乎找不到合适的组合。 (2认同)

tra*_*aal 8

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

curl -H @headerfile.txt https://www.google.com/  # requires curl 7.55.0
Run Code Online (Sandbox Code Playgroud)

如果你的卷曲不是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
    
    Run Code Online (Sandbox Code Playgroud)

    这可能会输出如下内容:

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

  • 在 macOS Mojave 上使用默认的curl 7.54.0,我必须在配置文件中使用双引号而不是单引号,否则我会收到有关未转义空格的警告,并且根本没有设置标题 (3认同)

use*_*246 5

curl $(xargs -a headers.txt printf "-H '%s'") example.org
Run Code Online (Sandbox Code Playgroud)