Команда Mail.ru Cloud Solutions перевела статью, автор которой составил краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS. Это не замена официального руководства по cURL, скорее, краткий конспект.
221 354 просмотров
cURL (расшифровывается как Client URL) — программное обеспечение, которое предоставляет библиотеку libcurl и инструмент командной строки curl. Возможности cURL огромны, во многих опциях легко потеряться.
curl — инструмент для передачи данных с сервера или на него, при этом используется один из поддерживаемых протоколов: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Команда предназначена для работы без взаимодействия с пользователем.
Команда curl запускается из командной строки и предустановлена в большинстве дистрибутивов Linux.
Варианты применения:
- доступ без браузера;
- внутри shell-скриптов;
- для тестирования API.
В основном я использовал curl для тестирования API, иногда просто вставляя команды, которые нашел в интернете. Но я хочу разобраться в curl и лучше понять его особенности. Так что поделюсь некоторыми командами, с которыми столкнулся во время работы.
Curl — идеальная утилита для тестирование API
Запрос страницы
Если никакие аргументы не указаны, то команда curl выполняет HTTP-запрос get и отображает статическое содержимое страницы. Оно аналогично тому, что мы видим при просмотре исходного кода в браузере.
curl www.google.com
Скачивание файла
Есть два варианта этой команды.
- Скачать файл и сохранить под оригинальным именем (testfile.tar.gz).
curl -O https://testdomain.com/testfile.tar.gz
- Скачать файл и сохранить под другим именем.
curl -o custom_file.tar.gz https://testdomain.com/testfile.tar.gz
Еще можно скачать несколько файлов одной командой, хотя в мануале так делать не рекомендуют.
curl -O https://testdomain.com/testfile.tar.gz -O https://testdomain.com/testfile2.tar.gz
Получение заголовков HTTP
Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции -I или -head. Они позволяют получить заголовок без тела документа.
curl -I https://www.google.com HTTP/1.1 200 OK Content-Type: text/html; charset=ISO-8859-1 P3P: CP=»This is not a P3P policy! See g.co/p3phelp for more info.» Date: Thu, 04 Jun 2020 15:07:42 GMT Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked Expires: Thu, 04 Jun 2020 15:07:42 GMT Cache-Control: private Set-Cookie: 1P_JAR=2020-06-04-15; expires=Sat, 04-Jul-2020 15:07:42 GMT; path=/; domain=.google.com; Secure Set-Cookie:
Игнорирование ошибки неправильных или самоподписанных сертификатов
Когда вы тестируете веб-приложение или API, то в вашем тестовом окружении могут быть самоподписанные или неправильные SSL-сертификаты. По умолчанию curl верифицирует все сертификаты. Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию -k или -insecure.
CURL — Установка | Основы использования CURL | Работа с API | Запросы с JSON Payload | Парсинг с jq
curl -k https://localhost/my_test_endpoint
Отправка POST-запроса
Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON.
- Запрос в виде списка имя=значение.
curl —data «param1=test1 http://test.com
- Запрос в виде JSON.
curl -H ‘Content-Type: application/json’ —data ‘<«param1″:»test1″,»param2″:»test2»>’ http://www.test.com
Параметр —data эквивалентен -d, оба указывают curl выполнить HTTP POST-запрос.
Указание типа запроса
Если curl не передаются никакие данные, то по умолчанию он выполняет HTTP GET запрос. Но если вам, например, нужно обновить данные, а не пересоздать их заново, то curl поддерживает опции, указывающие тип запроса. Параметры -x или —request позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.
# updating the value of param2 to be test 3 on the record id curl -X ‘PUT’ -d ‘<«param1″:»test1″,»param2″:»test3»>’ http://test.com/1
Использование авторизации
API защищено авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр -u или —user. Если просто передать логин, то curl запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.
curl -u https://my-test-api.com/endpoint1
Управление резольвом имен
Вы хотите протестировать API перед развертыванием и перенаправить запрос на тестовую машину — это можно сделать, указав альтернативный резольв имени эндпоинта для данного запроса. Все работает эквивалентно пропиcыванию хоста в /etc/hosts.
curl —resolve www.test.com:80:localhost http://www.test.com/
Загрузка файла
О возможности загрузки файла через curl я узнал недавно. Не был уверен, что это возможно, но, по всей видимости, это так: curl с опцией -F эмулирует отправку заполненной формы, когда пользователь нажимает кнопку отправки. Опция указывает curl передавать данные в виде POST-запроса, используя multipart / form-data Content-Type.
Вы можете загрузить несколько файлов, повторяя параметр -F.
Измерение продолжительности соединения
Вы можете использовать опцию -w для отображения информации в stdout после завершения передачи. Она поддерживает отображение набора переменных. Например, можно узнать общее время, которое потребовалось для успешного выполнения запроса. Это удобно, если вам нужно определить время загрузки или скачивания с помощью curl.
curl -w «%n» -o /dev/null -s www.test.com
Это некоторые из опций, которые можно использовать с curl. Надеюсь, информация была вам полезна и статья понравилась.
Источник: vc.ru
Что такое команда cURL и примеры ее использования
Что такое cURL? cURL — это сокращение от «Client URL». Данная утилита доступна в большинстве систем на основе Unix и часто используется для получения данных по заданному url или передачи и получения файлов по различным протоколам. Команда cURL поддерживает множество протоколов, сред них:
- HTTP и HTTPS
- FTP и FTPS
- IMAP и IMAPS
- POP3 и POP3S
- SMB и SMBS
- SFTP
- SCP
- TELNET
- GOPHER
- LDAP и LDAPS
- SMTP и SMTPS
Для работы cURL необходима библиотека libcurl, без нее не будет работать cURL. Если данной библиотеки у вас нет и у вас установлена ОС Ubuntu , то установить ее можно при помощи следующих команд:
$ sudo apt update $ sudo apt install libcurl3
если у вас установлена ОС Windows, то вам надо будет скачать библиотеку с сайта curl.haxx.se/download.html
Основной синтаксис cURL выглядит следующим образом:
curl [OPTIONS] [URL]
Вот параметры, которые мы будем использовать при отправке запросов:
- -X, –request- метод HTTP, который будет использоваться.
- -i, –include- Включить заголовки ответа.
- -d, –data- Данные, которые должны быть отправлены.
- -H, –header- Дополнительный заголовок для отправки.
##Проверка версии cURL
$ curl —version
$ curl www.example.com
##POST запрос Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON. Запрос в виде списка имя=значение:
$ curl —data «param1=test1 http://domain.com
Запрос в виде JSON:
curl -H ‘Content-Type: application/json’ —data » http://www.domain.com
Параметр —data эквивалентен -d, оба указывают cURL выполнить HTTP POST-запрос.
##Сохраните вывод cURL в файл Вывод команды cURL может легко сохранить в файл, добавив опцию -o в команде, как показано ниже
$ curl -o website.html https://domain.ru
##Скачивание файла Команды cURL могут загружать файлы из удалённой локации. Есть два способа это сделать: -O сохранит файл в текущем рабочем каталоге с тем же именем, что и у удалённого; -o позволяет указать другое имя файла или местоположение.
Скачать файл и сохранить под оригинальным именем. В этом примере архив filename.tar.gz будет загружен в текущий рабочий каталог.
$ curl -O https://example.com/filename.tar.gz
Скачать файл и сохранить под другим именем:
$ curl -o new_filename.tar.gz https://example.com/filename.tar.gz
Скачать файл надежно через SSH с помощью следующей команды:
$ curl -u user sftp://example.com/path/to/file
Скачать список файлов Можно скачать список файлов, для этого надо создать файл url_list.txt, который содержит список всех URL-адресов для загрузки и запустить следующую команду, которая выполнит загрузку всех файлов с этих URL.
$ xargs –n 1 curl -O < url_list.txt
##Доступ к FTP-серверу Чтобы получить доступ к FTP-серверу с помощью cURL, надо использовать следующую команду:
$ curl ftp://ftp.domain.com —user username:password
cURL будет подключаться к FTP-серверу и выведет список всех файлов и каталогов в домашнем каталоге пользователя Вы можете скачать файл с помощью FTP:
$ curl ftp://ftp.domain.com/filename.zip —user username:password
и загрузить файл на сервер FTP:
$ curl -T filename.zip ftp://ftp.domain.com/ —user username:password
Можно пропустить имя пользователя и пароль для анонимных FTP-соединений.
##Получение заголовков HTTP Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции -I или -head. Они позволяют получить заголовок без тела документа.
$ curl -I http://example.com
Игнорирование ошибки неправильных или самоподписанных сертификатов
Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию -k или -insecure.
curl -k https://localhost/my_page
Указание типа запроса
Параметры -X или —request позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.
если требуется передать JSON данные на сервер, то надо указать заголовок Content-Type: application/json и выполнить следующий запрос:
$ curl -X PUT -H «Content-Type: application/json» -d » http://domain.com/user/
пример запроса с типом DELETE
$ curl -X DELETE http://domain.com/user/
Запрос с cookies
Для того что бы использовать cookies в запросе нужно сохранить файлы cookie в файл, а затем получить к ним доступ, используя команду cat или редактор Vim. Вот пример запроса который сохранит cookie в файл:
$ curl —cookie-jar Mycookies.txt http://domain.com/ /index.html -O
теперь можно использовать данный файл что бы сделать запрос с cookies:
curl —cookie Mycookies.txt http://domain.com/
Использование авторизации
Если ресурс закрыт авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр -u или —user. Если просто передать логин, то curl запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.
$ curl -u https://domain.com/need_auth
Источник: blog-programmista.ru
Команда curl. Синтаксис. Примеры использования
Сurl – утилита командной строки для скачивания и загрузки данных. Она выросла из проекта шведского программиста Даниэля Стенберга. Изначально в середине 90-х, на заре развития Интернета, он разрабатывал бота, который должен был загружать с веб-страницы курсы валют и сообщать пользователям IRC эквивалент шведских крон в долларах США.
Со временем проект развивался, появлялась поддержка различных протоколов и новые функции. Теперь curl используется для передачи любых данных и ряда других полезных задач. Рассмотрим основные моменты работы с этим инструментом.
Синтаксис и опции curl
Синтаксис команды следующий:
curl [ОПЦИИ] [АРГУМЕНТ]
В качестве аргумента задается, как правило, URL скачиваемого файла. Основные опции перечислены ниже
-# — отображать простой прогресс-бар во время загрузки;
-0 — использовать протокол http 1.0;
-1 — использовать протокол шифрования tlsv1;
-2 — использовать sslv2;
-3 — использовать sslv3;
-4 — использовать ipv4;
-6 — использовать ipv6;
-A — указать свой USER_AGENT;
-b — сохранить Cookie в файл;
-c — отправить Cookie на сервер из файла;
-C — продолжить загрузку файла с места разрыва или указанного смещения;
-m — максимальное время ожидания ответа от сервера;
-d — отправить данные методом POST;
-D — сохранить заголовки, возвращенные сервером в файл;
-e — задать поле Referer-uri, указывает с какого сайта пришел пользователь;
-E — использовать внешний сертификат SSL;
-f — не выводить сообщения об ошибках;
-F — отправить данные в виде формы;
-G — если эта опция включена, то все данные, указанные в опции -d будут передаваться методом GET;
-H — передать заголовки на сервер;
-I — получать только HTTP заголовок, а все содержимое страницы игнорировать;
-j — прочитать и отправить cookie из файла;
-J — удалить заголовок из запроса;
-L — принимать и обрабатывать перенаправления;
-s — максимальное количество перенаправлений с помощью Location;
-o — выводить контент страницы в файл;
-O — сохранять контент в файл с именем страницы или файла на сервере;
-p — использовать прокси;
—proto — указать протокол, который нужно использовать;
-R — сохранять время последнего изменения удаленного файла;
-s — выводить минимум информации об ошибках;
-S — выводить сообщения об ошибках;
-T — загрузить файл на сервер;
-v — максимально подробный вывод;
-y — минимальная скорость загрузки;
-Y — максимальная скорость загрузки;
-z — скачать файл, только если он был модифицирован позже указанного времени;
-V — вывести версию.
Основные опции мы рассмотрим на простых примерах.
Просмотр версии curl
Опция -V или —version выводит не только версию curl, но и краткую информацию о поддерживаемых протоколах и функциях:
$ curl —version
Скачивание файла
Если вам требуется скачать файл, запустите curl с опцией –O или –o. Первая из них сохраняет файл в текущей рабочей директории под тем же именем, что и в удаленном месторасположении. Вторая опция позволяет вам указать другое имя и/или место для скачивания.
Cохранение файла под исходным именем (yourfile) в текущей рабочей директории.
$ curl -O http://yourdomain.com/yourfile
Cохранение файла под именем newfile в директории /tmp/examplе/.
$ curl -o /tmp/examplе/newfile http://yourdomain.com/yourfile.tar.gz — сохранение файла под именем newfile.tar.gz в директории /tmp/examplе/
Возобновление прерванной загрузки
Если скачивание по какой-то причине было прервано (например, пользователь нажал Ctrl+C), вы легко можете возобновить его с момента остановки при помощи опции -C – (дефис, С, тире):
$ curl -C — -O http://yourdomain.com/yourfile
Скачивание нескольких файлов
Следующая команда позволит вам скачать info.html с http://yoursite.com и about.html c http://mysite.com в один прием:
$ curl -O http://yoursite.com/info.html/info -O http://mysite.com/about.html/about
Если использовать curl вместе с командой xargs, можно скачивать файлы в соответствии со списком URL, заданном в файле (в данном примере listurls.txt):
$ xargs -n 1 curl < listurls.txt
Использование прокси-сервера
Если вы подключены через прокси-сервер, нужно указать его команде curl при помощи следующих опций (в данном примере имя сервера proxy.yourdomain.com, порт 8080, имя пользователя user, пароль qwerty1234):
$ curl -x proxy.yourdomain.com:8080 -U user:qwerty1234 -O http://yourdomain.com/yourfile
Если ваш прокси-сервер не требует аутентификации, опцию -U user:qwerty1234 указывать не нужно.
Запрос HTTP-заголовков
HTTP-заголовки позволяют удаленному веб-серверу помимо ответа на сам запрос отправлять дополнительную информацию. Она предоставляет клиенту данные о том, как обрабатывать ответ:
Для запроса HTTP-заголовков веб-сайта выполните команду с опцией -I:
$ curl -I https://itproffi.ru
Также эту информацию можно получить, воспользовавшись функциями браузера для разработчиков.
cURL POST-запросы с параметрами
Следующая команда отправит на https://yourdomain.com/info.php параметры firstName и lastName с соответствующими значениями:
$ curl —data «firstName=Ivan https://yourdomain.com/info.php
Этим приемом можно пользоваться для симуляции работы обычных веб-форм.
Скачивание файлов с FTP-сервера
Следующая команда скачивает в текущую рабочую директорию файл yourfile с удаленного FTP-сервера ftp://yourftpserver (имя пользователя user, пароль qwerty1234):
$ curl -u user:qwerty1234 -O ftp://yourftpserver/yourfile
Если FTP-сервер поддерживает анонимный вход, параметр –u с именем пользователя и пароля указывать не нужно.
Загрузка файлов на FTP-сервер
Для загрузки локального файла mylocalfile.tar.gz воспользуйтесь следующей командой:
$ curl -u user:qwerty1234 -T mylocalfile.tar.gz ftp://yourftpserver
Указание агента пользователя
Агент пользователя – часть информации HTTP-запроса. Она показывает, каким браузером пользуется клиент. Можно посмотреть, что имеющаяся версия curl передает по умолчанию и установить новое значение:
$ curl -I http://localhost —user-agent «I am a new web browser»
Запись файлов cookie с веб-сайта
Хотите посмотреть, какие файлы cookie скачиваются на ваш компьютер, когда вы заходите на определенный сайт? Опция —cookie-jar сохраняет их список в файл, который в дальнейшем можно просмотреть при помощи команды cat.
$ curl —cookie-jar cookies.txt https://itproffi.ru/
Отправка файлов cookie на сайт
Полученные в предыдущем примере файлы cookie можно использовать в дальнейших запросах к тому же самому сайту:
$ curl —cookie cookies.txt https://itproffi.ru
Изменение разрешения имен
Если вы веб-разработчик и хотите протестировать локальную версию сайта, прежде чем загружать его на сервер, при помощи опции —resolve можно указать curl выполнять разрешение имени вашего сайта на адрес локального узла, например:
$ curl —resolve www.yourdomain.com:80:localhost http://www.yourdomain.com/
Таким образом, при запросе на http://www.yourdomain.com curl будет запрашивать сайт с локального узла, а не использовать DNS или файл /etc/hosts.
Ограничение скорости скачивания
Чтобы curl не занимал всю пропускную способность канала, можно ограничить скорость скачивания при помощи опции —limit-rate:
$ curl —limit-rate 100K http://yourdomain.com/yourfile -O