Curl: читать заголовки из файла

После того, как заголовок -dump записывает файл, как читать эти заголовки обратно в следующий запрос? Я хотел бы прочитать их из файла, потому что их несколько.

Я попробовал стандарт в: cat headers | curl -v -H - ...

Я использую функцию Firebug для "Копировать заголовки запросов", а затем сохраняю их в файле. Это похоже на тот же формат.

Ответы

Ответ 1

до скручивания 7.55.0

curl не имел никакого способа для "массового изменения" таких заголовков, даже не из файла.

Ваш лучший подход со старой версией curl, вероятно, должен вместо этого написать сценарий оболочки, который собирает все заголовки из файла и использует их, например:

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

Вызовите скрипт следующим образом:

$ sh script.sh < header_file

поскольку curl 7.55.0

Полегче:

$ curl -H @header_file $URL

... где заголовочный файл представляет собой текстовый файл с заголовком HTTP в каждой строке.

Ответ 2

как насчет этого:

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

где headers.txt выглядит как

Header1: bla
Header2: blupp

работает в BASH.

Ответ 3

Начиная с curl 7.55.0, теперь он может читать заголовки из файла:

curl -H @filename

Теперь это легко.

Ответ 4

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

Ответ 5

Как ответил @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/