Как передать информацию заголовка запроса httpie в bash?

Я делаю запрос HEAD к этому местоположению файла, используя https://httpie.org:

$ http HEAD https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb 
HTTP/1.1 302 Moved Temporarily
Connection: keep-alive
Content-Length: 169
Content-Type: text/html
Date: Mon, 09 Sep 2019 14:55:56 GMT
Location: https://dbeaver.io/files/6.2.0/dbeaver-ce_6.2.0_amd64.deb
Server: nginx/1.4.6 (Ubuntu)

Меня интересует только заголовок Location, так как я хочу сохранить его значение в файле, чтобы увидеть, была ли обновлена ​​​​цель.

Я старался:

http HEAD https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb \
    | grep Location \
    | sed "s/Location: //"

но это дает пустой ответ.

Я предполагаю, что вывод идет к stderr вместо stdout, хотя я действительно не хочу объединять для этого stdout и stderr.

Я скорее ищу решение непосредственно с помощью команды http.


person k0pernikus    schedule 09.09.2019    source источник


Ответы (1)


Вам не хватает параметра --header:

http HEAD https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb \
    --headers \
    | grep Location \
    | sed "s/Location: //"

будет на момент написания этой статьи печатать:

https://dbeaver.io/files/6.2.0/dbeaver-ce_6.2.0_amd64.deb

Кроме того, ваше предположение о том, что httpie будет перенаправлять на stderr, также неверно. Вместо этого все сводится к автоматическому изменению поведения по умолчанию параметра --print. И меняется от того факта, что httpie был перекачан!

--print WHAT, -p WHAT
  String specifying what the output should contain:

      'H' request headers
      'B' request body
      'h' response headers
      'b' response body

  The default behaviour is 'hb' (i.e., the response headers and body
  is printed), if standard output is not redirected. If the output is piped
  to another program or to a file, then only the response body is printed
  by default.

Параметр --header/-h — это просто сокращение для --print=h.

person k0pernikus    schedule 09.09.2019