Руководство curl по HTTP-запросам

curl - отличный инструмент, который позволяет создавать сетевые запросы из командной строки.

curl - это инструмент командной строки, который позволяет передавать данные по сети.

Он поддерживает множество протоколов "из коробки", включая HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3 и многие другие.

Когда дело доходит до отладки сетевых запросов, curl - один из лучших инструментов, которые вы можете найти.

Это один из тех инструментов, к которому, как только знаешь, как пользоваться, всегда возвращаешься. Лучший друг программиста.

Он универсален, работает на Linux, Mac, Windows. Обратитесь кофициальное руководство по установкечтобы установить его в вашей системе.

Интересный факт: автор и сопровождающий curl, шведский, был награжден королем Швеции за вклад, который его работа (curl и libcurl) внесла в компьютерный мир.

Давайте погрузимся в некоторые команды и операции, которые вы, скорее всего, захотите выполнять при работе с HTTP-запросами.

Эти примеры включают работу с HTTP, самым популярным протоколом.

Выполните HTTP-запрос GET

Когда вы выполняете запрос, curl вернет тело ответа:

curl https://flaviocopes.com/

Получить заголовки ответа HTTP

По умолчанию заголовки ответов скрыты в выводе curl. Чтобы показать их, используйтеiвариант:

curl -i https://flaviocopes.com/

Получить только заголовки ответа HTTP

С использованиемIвариант, вы можете получитьТолькозаголовки, а не тело ответа:

curl -I https://flaviocopes.com/

Выполните запрос HTTP POST

ВXопция позволяет вам изменить используемый HTTP-метод. По умолчанию используется GET, и это то же самое, что и запись

curl -X GET https://flaviocopes.com/

С помощью-X POSTвыполнит запрос POST.

Вы можете выполнить запрос POST, передав URL-адрес данных в кодировке:

curl -d "option=value&something=anothervalue" -X POST https://flaviocopes.com/

В этом случаеapplication/x-www-form-urlencodedContent-Type отправлен.

Выполните HTTP-запрос POST, отправив JSON

Вместо публикации данных в кодировке URL, как в приведенном выше примере, вы можете отправить JSON.

В этом случае вам нужно явно установить заголовок Content-Type, используяHвариант:

curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://flaviocopes.com/

Вы также можете отправить файл JSON со своего диска:

curl -d "@my-file.json" -X POST https://flaviocopes.com/

Выполните запрос HTTP PUT

Концепция такая же, как и для запросов POST, просто измените метод HTTP, используя-X PUT

Следуйте перенаправлению

Ответ перенаправления, например 301, который указываетLocationзаголовок ответа, может автоматически сопровождаться указаниемLвариант:

curl http://flaviocopes.com/

не будет автоматически следовать за версией HTTPS, на которую я настроил перенаправление, но это будет:

curl -L http://flaviocopes.com/

Сохранить ответ в файл

С использованиемoвариант, который вы можете указать curl, чтобы сохранить ответ в файл:

curl -o file.html https://flaviocopes.com/

Вы также можете просто сохранить файл по его имени на сервере, используяOвариант:

curl -O https://flaviocopes.com/index.html

Использование HTTP-аутентификации

Если для ресурса требуется базовая HTTP-аутентификация, вы можете использоватьuвозможность передать значения user: password:

curl -u user:pass https://flaviocopes.com/

Установить другой пользовательский агент

Пользовательский агент сообщает серверу, какой клиент выполняет запрос. По умолчанию curl отправляетcurl/<version>пользовательский агент, например:curl/7.54.0.

Вы можете указать другой пользовательский агент, используя--user-agentвариант:

curl --user-agent "my-user-agent" https://flaviocopes.com

Проверка всех деталей запроса и ответа

Использовать--verboseвозможность заставить curl выводить все детали запроса и ответа:

curl --verbose -I https://flaviocopes.com/
*   Trying 178.128.202.129...
* TCP_NODELAY set
* Connected to flaviocopes.com (178.128.202.129) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: flaviocopes.com
* Server certificate: Let's Encrypt Authority X3
* Server certificate: DST Root CA X3
> HEAD / HTTP/1.1
> Host: flaviocopes.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Cache-Control: public, max-age=0, must-revalidate
Cache-Control: public, max-age=0, must-revalidate
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Date: Mon, 30 Jul 2018 08:08:41 GMT
Date: Mon, 30 Jul 2018 08:08:41 GMT
...

Copying any browser network request to a curl command

When inspecting any network request using the Chrome Developer Tools, you have the option to copy that request to a curl request:

curl 'https://github.com/curl/curl' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade-Insecure-Requests: 1' -H 'DNT: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: https://www.google.it/' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9,it;q=0.8' -H 'Cookie: _octo=GH1.1.933116459.1507545550; _ga=GA1.2.643383860.1507545550; tz=Europe%2FRome; user_session=XXXXX; __Host-user_session_same_site=YYYYYY; dotcom_user=flaviocopes; logged_in=yes; has_recent_activity=1; _gh_sess=ZZZZZZ' --compressed

More network tutorials: