В данной статье собраны некоторые полезные сниппеты для работы с 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. Пост будет добавляться интересными примерами.