Curl — набор на все случаи жизни

В данной статье собраны некоторые полезные сниппеты для работы с curl. Curl — это кросс-платформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.

Для справки: curl поддерживает не только протокол HTTP, но и десяток других — DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Вообщем большой комбайн с различными интересными фичами. Я покажу лишь примеры, которые использовал сам за последнее время.

Get HTTP status code

curl -s -o /dev/null -w "%{http_code}\n" -H "Content-Type: application/x-www-form-urlencoded" -H 'Authorization: token' --data "action=activate"  -X GET https://api.sassoft.ru/status

-s или silent означает не показывать прогресс

-o записать ответ в файл

-w использовать формат для записи, в нашем случае нам нужен только HTTP Status code

Basic auth

curl -XGET -u user:pass https://example.com

-u необходимый для Basic Auth username и password

POST request

curl -X POST https://example.com/users -d '{"username":"[email protected]","password":""}'

-X или —request тип запроса: POST, GET, PUT, DELETE

-d HTTP POST данные

JSON-RPC curl

curl --user name:pass --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"getbalance","params":[]}' -H 'content-type:text/plain;' http://some-rpc.com:8332

Verbose mode

curl -v -X GET https://example.com

-v ключ чтобы сказать curl выводить больше информации о проведенном запросе

Headers only

curl -I -X GET https://sassoft.ru

-I выводит только информацию о заголовках документа:

HTTP/1.1 200 OK
Date: Sat, 23 Jan 2021 00:29:24 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid; expires=Mon, 22-Feb-21 00:29:24 GMT; path=/; domain=.sassoft.ru; HttpOnly; SameSite=Lax
Vary: Accept-Encoding
X-Powered-By: PHP/7.1.20
Set-Cookie: PHPSESSID=x; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Link: <https://sassoft.ru/wp-json/>; rel="https://api.w.org/"
X-Backend-Server: sassoft-web
Strict-Transport-Security: max-age=15724800; includeSubDomains
CF-Cache-Status: DYNAMIC
cf-request-id: 07ce3e5bdc0000d6b96b0b5000000001
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Report-To: {"max_age":604800,"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report?s=S7mKt9DI1irvHCQ2B5cUiBcrAbE%2Fla%2ByxzzV0R5xDhIxZ%2BFTsslUgm2u%2Fj2j8MXOITHuN17Cd0FcpDYDAbQ22WzuwmBAUDOAR2zdaZPmLWWhb53hUCvU"}],"group":"cf-nel"}
NEL: {"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 615d6672ff35d6b9-FRA

Fail silently:

curl -f -H "Authorization: token $GITHUB_TOKEN" -H "Content-Type: application/json" -X GET "https://raw.githubusercontent.com/example/script.sh"

-f флаг говорит curl не отдавать никакой информации если запрос завершился с HTTP ошибкой

-H здесь просто request headers

Follow redirects:

curl -sSL https://agent.digitalocean.com/install.sh

— sS флаг выведет ошибку если она произойдет, в ином случае это аналогично работе в silent mode

-L обозначает follow redirects — если придет 302 то curl сделает повторный запрос на адрес указанный в redirect header

Save to file:

curl -o docker-compose.yml https://raw.githubusercontent.com/tomav/docker-mailserver/master/docker-compose.yml.dist

-o имя файла, куда сохранить полученный ответ

Retries:

curl --connect-timeout 5 \
     --max-time 10 \
     --retry 5 \
     --retry-delay 0 \
     --retry-max-time 60 \
     'http://www.site.com/download/file.txt'

—connect-timeout максимальное время, выделяемое для установки подключения

—max-time максимальное время, выделяемое для проведения операции

—retry-delay время в секундах перед попытками

—retry-max-time максимально время в секундах, после которых можно делать повторы

 

Здесь только малая часть интересных команд у curl. Пост будет добавляться интересными примерами.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *