Вопрос по post, curl, http-headers – Получение только заголовка ответа из HTTP POST с помощью curl

465

В качестве опции можно запросить только заголовки, используя HTTP HEAD-I вcurl(1).

<code>$ curl -I /
</code>

Длинные тела ответов HTML - это боль в командной строке, поэтому я хотел бы получить только заголовок в качестве обратной связи для моих запросов POST. Однако HEAD и POST - это два разных метода.

Как заставить curl отображать только заголовки ответа на POST-запрос?

Ваш Ответ

7   ответов
15

Гораздо проще & # x2013; & # xA0; это то, что я использую дляизбегать отслеживания коротких ссылок & # x2013; & # xA0; является следующим:

curl -IL http://bit.ly/in-the-shadows

…which also follows links.

40

Следующая команда отображает дополнительную информацию

curl -X POST http:,//httpbin.org/post -vvv > /dev/null

Вы можете попросить сервер отправить только ГОЛОВУ, а не полный ответ

curl -X HEAD -I http://httpbin.org/

Note: Правильно настроенные / запрограммированные веб-серверы будут реагировать иначе, чем пост, потому что это запрос HEAD, а не POST Но работает большую часть времени

Проблема с-X HEAD является то, что сервер может реагировать по-другому, так как теперь он получаетHEAD запрос вместоGET (или каким бы ни был предыдущий запрос)
@dmd Если я понимаю руководство по cURL для-X, --request правильно,-X HEAD по-прежнему приводит к & # x201C; тонне данных & # x201D; но есть-I, --head что должно привести к тому, что вы ожидаете.
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the Warning: way you want. Consider using -I/--head instead.
К сожалению, другой ответ выиграл, потому что это правильный ответ - он не излишне передает тонну данных.
Вы не правильно поняли это.-X HEAD а также-I точно эквивалентны.
13

Хотя другие ответы не помогли мне во всех ситуациях, лучшее решение, которое я смог найти (работа сPOST а) взяты изВот:

curl -vs 'https://some-site.com' 1> /dev/null

Я должен был поместить URL между кавычками, чтобы это работало.
Нужно это или нет, может зависеть от URL и используемой оболочки. Я улучшил ответ соответственно. Благодарю.
0

Может быть, это немного экстрим, но я использую эту супер короткую версию:

curl -svo. <URL>

Объяснение:

-v вывести отладочную информацию (которая включает заголовки)

-o. отправить данные веб-страницы (которые мы хотим игнорировать) в определенный файл,. в этом случае, который является каталогом и является недопустимым назначением и делает вывод игнорируемым.

-s нет индикатора выполнения, нет информации об ошибке (в противном случае вы увидитеWarning: Failed to create the file .: Is a directory)

42

Для тел с длительным откликом (и других подобных ситуаций) я всегда используюless, так

curl -i https://api.github.com/users | less

или же

curl -s -D - https://api.github.com/users | less

сделаю работу.

660
-D, --dump-header <file>
       Write the protocol headers to the specified file.

       This  option  is handy to use when you want to store the headers
       that a HTTP site sends to you. Cookies from  the  headers  could
       then  be  read  in  a  second  curl  invocation by using the -b,
       --cookie option! The -c, --cookie-jar option is however a better
       way to store cookies.

а также

-S, --show-error
       When used with -s, --silent, it makes curl show an error message if it fails.

а также

-L/--location
      (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response
      code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from  all  requested
      pages  will  be  shown.  When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different
      host, it won’t be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to
      follow by using the --max-redirs option.

      When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP
      response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following  request  using  the  same  unmodified
      method.

со страницы руководства. так

curl -sSL -D - www.acooke.org -o /dev/null

следует перенаправлениям, сбрасывает заголовки на стандартный вывод и отправляет данные в / dev / null (это GET, а не POST, но вы можете сделать то же самое с POST - просто добавьте любую опцию, которую вы уже используете для POSTing данных )

Обратите внимание- после-D что указывает на то, что выходной «файл» это стандартный вывод

@JJS для меня $ null работал на Win7. Это связано с тем, что cLink установлен на Windows.
в curl на Windows вы можете сделать это:curl -s -D - http://yahoo.com -o $null
@mamachanko-D принимает аргумент, который говорит, куда вывод должен идти. одиночная черточка означает, что она должна идти в стандартный вывод.
& Quot; - & quot; перед URL может показаться неважным, но это не так.
Приведенный выше комментарий действителен, если вы используете powershell. для использования cmd.execurl -s -D - http://yahoo.com -o nul
118

Другие ответы требуют загрузки тела ответа. Но есть способ сделать запрос POST, который будет получать только заголовок:

curl -s -I -X POST http://www.google.com

-I сам выполняет запрос HEAD, который может быть переопределен-X POST выполнить запрос POST (или любой другой) и при этом получить только данные заголовка.

@nickboldt Дело в том, что сервер может по-разному реагировать на запрос HEAD, а не на запрос POST или GET (а некоторые серверы на самом деле это делают), поэтому-X HEAD Здесь нет надежного решения.
@JeffPuckettII Ну, я бы сказал, что это немного придирчиво. Вы можете заменитьGET сPOST в приведенной выше команде, и она будет работать как ожидалось.or any other ключ там.
Это самый правильный ответ, на мой взгляд. Это легко запомнить, это на самом деле отправляетGET запрашивает и не загружает все тело ответа (или, по крайней мере, не выводит его).-s флаг не нужен.
Это не работает, когда вы действительно хотитеPOST некоторые данные. Керл говорит:Warning: You can only select one HTTP request method! You asked for both POST Warning: (-d, --data) and HEAD (-I, --head).
Этот ответ на самом деле правильный, потому что веб-серверы могут возвращать разные заголовки в зависимости от метода запроса. Если вы хотите проверить заголовки на GET, вы должны использовать запрос GET.

Похожие вопросы