Как пользоваться curl | Losst
Нам часто приходится загружать различные файлы из интернета, например, исполняемые файлы программ, файлы скриптов, архивы с исходниками. Но не всегда это нужно делать через браузер. Во многих ситуациях гораздо проще выполнить все действия через терминал. Поскольку таким образом вы можете автоматизировать процесс. С другой стороны, веб-мастерам время от времени приходится тестировать доступность веб-сайтов, проверять отправляемые и получаемые заголовки и многое другое.
Для решения таких задач и задач подобного круга можно воспользоваться утилитой curl. Она позволяет решить намного более широкий круг задач, среди которых даже имитация действий пользователя на сайте. В этой статье мы рассмотрим как пользоваться curl, что это такое и зачем нужна эта программа.
Содержание статьи:
Что такое curl?
На самом деле, curl — это больше чем просто утилита командной строки для Linux или Windows. Это набор библиотек, в которых реализуются базовые возможности работы с URL страницами и передачи файлов. Библиотека поддерживает работу с протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP. Она отлично подходит для имитации действий пользователя на страницах и других операций с URL адресами.
Поддержка библиотеки curl была добавлена в множество различных языков программирования и платформ. Утилита curl — это независимая обвертка для этой библиотеки. Именно на этой утилите мы и остановимся в этой статье.
Команда curl
Перед тем как перейти к описанию того как может использоваться команда curl linux, давайте разберем саму утилиту и ее основные опции, которые нам понадобятся. Синтаксис утилиты очень прост:
$ curl опции ссылка
Теперь рассмотрим основные опции:
- -# — отображать простой прогресс-бар во время загрузки;
- -0 — использовать протокол http 1.0;
- -1 — использовать протокол шифрования tlsv1;
- -2 — использовать sslv2;
- -3 — использовать sslv3;
- -4 — использовать ipv4;
- -6 — использовать ipv6;
- -A — указать свой USER_AGENT;
- -b — сохранить Cookie в файл;
- -c — отправить Cookie на сервер из файла;
- -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 linux, но здесь перечислено все основное, что вам придется использовать.
Как пользоваться curl?
Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.
Загрузка файлов
Самая частая задача — это загрузка файлов linux. Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или html страницы:
curl https://raw.githubusercontent.com/curl/curl/master/README.md
Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:
curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md
А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:
curl -O https://raw.githubusercontent.com/curl/curl/master/README.md
Если загрузка была неожиданно прервана, вы можете ее возобновить:
curl -# -C - -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz
Если нужно, одной командой можно скачать несколько файлов:
curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README
Еще одна вещь, которая может быть полезной администратору — это загрузка файла, только если он был изменен:
curl -z 21-Dec-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README
Данная команда скачает файл, только если он был изменен после 21 декабря 2017.
Ограничение скорости
Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:
curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz
Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:
curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md
Передача файлов
Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:
curl -T login.txt ftp://speedtest.tele2.net/upload/
Или проверим отправку файла по HTTP, для этого существует специальный сервис:
curl -T ~/login.txt http://posttestserver.com/post.php
В ответе утилита сообщит где вы можете найти загруженный файл.
Отправка данных POST
Вы можете отправлять не только файлы, но и любые данные методом POST. Напомню, что этот метод используется для отправки данных различных форм. Для отправки такого запроса используйте опцию -d. Для тестирования будем пользоваться тем же сервисом:
curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php
Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:
curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php
Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.
Передача и прием куки
Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:
curl -c cookie.txt http://posttestserver.com/post.php
Затем можно отправить cookie curl обратно:
curl -b cookie.txt http://posttestserver.com/post.php
Передача и анализ заголовков
Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:
curl -I https://losst.ru
А опция -H позволяет отправить нужный заголовок или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:
curl -I --header 'If-Modified-Since: Mon, 26 Dec 2016 18:13:12 GMT' https://losst.ru
Аутентификация curl
Если на сервере требуется аутентификация одного из распространенных типов, например, HTTP Basic или FTP, то curl очень просто может справиться с такой задачей. Для указания данных аутентификации просто укажите их через двоеточие в опции -u:
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
Точно так же будет выполняться аутентификация на серверах HTTP.
Использование прокси
Если вам нужно использовать прокси сервер для загрузки файлов, то это тоже очень просто. Достаточно задать адрес прокси сервера в опции -x:
curl -x proxysever.test.com:3128 http://google.co.in
Выводы
В этой статье мы рассмотрели как пользоваться curl, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с wget, они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.
Команда 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&lastName=Ivanov" 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
Заключение
Мы рассмотрели краткую историю появления curl и наиболее характерные примеры применения этой команды. Для более подробной информации можно обратиться к соответствующей man-странице.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Утилита командной строки CURL. Категория: Web-разработка • Разное
CURL — утилита командной строки для Linux или Windows, поддерживает работу с протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, POP3, IMAP и SMTP. Она отлично подходит для имитации действий пользователя на страницах сайтов и других операций с URL адресами. Поддержка CURL добавлена в множество различных языков программирования и платформ.
Для начала скачаем саму утилиту, для этого переходим на официальный сайт утилиты, в раздел Download. После скачивания архива для своей платформы (у меня это Windows 64 bit), распаковываем архив. Чтобы иметь возможность работать с HTTPS и FTPS, устанавливаем сертификат безопасности url-ca-bundle.crt
, который находится в папке curl/bin
.
Запускаем командную строку, переходим в директорию curl/bin
и пытаемся скачать главную страницу Google:
> cd C:/curl/bin > curl google.com <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <h2>301 Moved</h2> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>
Опция -X
позволяет задать тип HTTP-запроса вместо используемого по умолчанию GET. Дополнительные запросы могут быть POST, PUT и DELETE или связанные с WebDAV — PROPFIND, COPY, MOVE и т.п.
Следовать за редиректами
Сервер Google сообщил нам, что страница google.com
перемещена (301 Moved Permanently), и теперь надо запрашивать страницу www.google.com
. С помощью опции -L
укажем CURL следовать редиректам:
> curl -L google.com <!doctype html> <html itemscope="" itemtype="http://schema.org/WebPage" lang="ru"> <head> <meta content="Поиск информации в интернете: веб страницы, картинки, видео и многое другое." name="description"> <meta content="noodp" name="robots"> <meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"> <meta content="origin" name="referrer"> <title>Google</title> ..........
Сохранить вывод в файл
Чтобы сохранить вывод в файл, надо использовать опции -o
или -O
:
-o
(o
нижнего регистра) — результат будет сохранён в файле, заданном в командной строке;-O
(O
верхнего регистра) — имя файла будет взято из URL и будет использовано для сохранения полученных данных.
Сохраняем страницу Google в файл google.html
:
> curl -L -o google.html google.com % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 219 100 219 0 0 2329 0 --:--:-- --:--:-- --:--:-- 2329 100 14206 0 14206 0 0 69980 0 --:--:-- --:--:-- --:--:-- 69980
Сохраняем документ gettext.html
в файл gettext.html
:
> curl -O http://www.gnu.org/software/gettext/manual/gettext.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1375k 100 1375k 0 0 800k 0 0:00:01 0:00:01 --:--:-- 800k
Загрузить файл, только если он изменён
Опция -z
позволяет получить файлы, только если они были изменены после определённого времени. Это будет работать и для FTP и для HTTP. Например, файл archive.zip
будет получен, если он изменялся после 20 августа 2018 года:
> curl -z 20-Aug-18 http://www.example.com/archive.zip
Команда ниже загрузит файл archive.zip
, если он изменялся до 20 августа 2018 года:
> curl -z -20-Aug-18 http://www.example.com/archive.zip
Прохождение аутентификации HTTP
Опция -u
позволяет указать данные пользователя (имя и пароль) для прохождения базовой аутентификаци (Basic HTTP Authentication):
> curl -u evgeniy:qwerty -O http://www.example.com/archive.zip
Получение и отправка cookie
Cookie используются сайтами для хранения некой информации на стороне пользователя. Сервер сохраняет cookie на стороне клиента (т.е. в браузере), отправляя заголовки:
Set-Cookie: PHPSESSID=svn7eb593i8d2gv471rs94og58; path=/ Set-Cookie: visitor=fa867bd917ad0d715830a6a88c816033; expires=Mon, 16-Sep-2019 08:20:53 GMT; Max-Age=31536000; path=/ Set-Cookie: lastvisit=1537086053; path=/
А браузер, в свою очередь, отправляет полученные cookie обратно на сервер при каждом запросе. Разумеется, тоже в заголовках:
Cookie: PHPSESSID=svn7eb593i8d2gv471rs94og58; visitor=fa867bd917ad0d715830a6a88c816033; lastvisit=1537086053
Передать cookie на сервер, как будто они были ранее получены от сервера:
> curl -b lastvisit=1537086053 http://www.example.com/
Чтобы сохранить полученные сookie в файл:
> curl -c cookie.txt http://www.example.com/
Затем можно отправить сохраненные в файле cookie обратно:
> curl -b cookie.txt http://www.example.com/catalog/
Файл cookie.txt
имеет вид:
# Netscape HTTP Cookie File # https://curl.haxx.se/docs/http-cookies.html # This file was generated by libcurl! Edit at your own risk. www.example.com FALSE / FALSE 0 lastvisit 1537085301 www.example.com FALSE / FALSE 1568621304 visitor 60f7c17ba4b5d77975dfd020f06ac8ca www.example.com FALSE / FALSE 0 PHPSESSID p23cr2d14rlgj5kls58kd7l6a6
Получение и отправка заголовков
По умолчанию, заголовки ответа сервера не показываются. Но это можно исправить:
> curl -i google.com HTTP/1.1 301 Moved Permanently Location: http://www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Sun, 16 Sep 2018 08:28:18 GMT Expires: Tue, 16 Oct 2018 08:28:18 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 219 X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <h2>301 Moved</h2> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>
Если содержимое страницы не нужно, а интересны только заголовки (будет отправлен HEAD
запрос):
> curl -I http://www.example.com/ HTTP/1.1 200 OK Date: Sun, 16 Sep 2018 08:20:52 GMT Server: Apache/2.4.34 (Win64) mod_fcgid/2.3.9 X-Powered-By: PHP/7.1.10 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Set-Cookie: PHPSESSID=svn7eb593i8d2gv471rs94og58; path=/ Set-Cookie: visitor=fa867bd917ad0d715830a6a88c816033; expires=Mon, 16-Sep-2019 08:20:53 GMT; Max-Age=31536000; path=/ Set-Cookie: lastvisit=1537086053; path=/ Content-Length: 132217 Content-Type: text/html; charset=utf-8
Посмотреть, какие заголовки отправляет CURL при запросе, можно с помощью опции -v
, которая выводит более подробную информацию:
> curl -v google.com
- Строка, начинающаяся с
>
означает заголовок, отправленный серверу - Строка, начинающаяся с
<
означает заголовок, полученный от сервера - Строка, начинающаяся с
*
означает дополнительные данные от CURL
* Rebuilt URL to: http://google.com/ * Trying 173.194.32.206... * TCP_NODELAY set * Connected to google.com (173.194.32.206) port 80 (#0)
> GET / HTTP/1.1 > Host: google.com > User-Agent: curl/7.61.1 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Location: http://www.google.com/ < Content-Type: text/html; charset=UTF-8 < Date: Mon, 17 Sep 2018 15:11:49 GMT < Expires: Wed, 17 Oct 2018 15:11:49 GMT < Cache-Control: public, max-age=2592000 < Server: gws < Content-Length: 219 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <h2>301 Moved</h2> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>
* Connection #0 to host google.com left intact
Если этой информации недостаточно, можно использовать опции --trace
или --trace-ascii
.
А вот так можно отправить свой заголовок:
> curl -H "User-Agent: Mozilla/5.0" http://www.example.com/
Отправка данных методом POST
Команда ниже отправляет POST запрос на сервер аналогично тому, как пользователь, заполнив HTML форму, нажал бы кнопку «Отправить». Данные будут отправлены в формате application/x-www-form-urlencoded
.
> curl -d "key1=value1&key2=value2" http://www.example.com
> curl --data "key1=value1&key2=value2" http://www.example.com
Параметр --data
аналогичен --data-ascii
, для отправки двоичных данных необходимо использовать параметр --data-binary
. Для URL-кодирования полей формы нужно использовать --data-urlencode
.
> curl --data-urlencode "name=Василий" --data-urlencode "surname=Пупкин" http://www.example.com
Если значение опции --data
начинается с @
, то после него должно быть имя файла с данными (или дефис — тогда будут использованы данные из стандартного ввода). Пример получения данных из файла для отправки POST-запроса:
> curl --data @data.txt http://www.example.com
Содержимое файла data.txt
:
key1=value1&key2=value2
Массив $_POST
, который будет содержать данные этого запроса:
Array ( [key1] => value1 [key2] => value2 )
Пример URL-кодирования данных из файла перед отправкой POST-запроса:
> curl --data-urlencode [email protected] http://www.example.com
Содержимое файла username.txt
:
Иванов Иван Иванович
Массив $_POST
, который будет содержать данные этого запроса:
Array ( [name] = Иванов Иван Иванович )
Загрузка файлов методом POST
Для HTTP запроса типа POST существует два варианта передачи полей из HTML форм, а именно, используя алгоритм application/x-www-form-urlencoded
и multipart/form-data
. Алгоритм первого типа создавался давным-давно, когда в языке HTML еще не предусматривали возможность передачи файлов через HTML формы.
Со временем возникла необходимость через формы отсылать еще и файлы. Тогда консорциум W3C взялся за доработку формата POST запроса, в результате чего появился документ RFC 1867. Форма, которая позволяет пользователю загрузить файл, используя алгоритм multipart/form-data
, выглядит примерно так:
<form action="/upload.php" method="POST" enctype="multipart/form-data"> <input type="file" name="upload"> <input type="submit" name="submit" value="OK"> </form>
Чтобы отправить на сервер данные такой формы:
> curl -F [email protected] -F submit=OK http://www.example.com/upload.php
Скрипт upload.php
, который принимает данные формы:
<?php print_r($_POST); print_r($_FILES); move_uploaded_file($_FILES['upload']['tmp_name'], 'image.jpg');
Ответ сервера:
Array ( [submit] => OK ) Array ( [upload] => Array ( [name] => image.jpg [type] => image/jpeg [tmp_name] => D:\work\temp\phpB02F.tmp [error] => 0 [size] => 2897 ) )
Работа по протоколу FTP
Скачать файл с FTP-сервера:
> curl -u username:password -O ftp://example.com/file.zip
Если заданный FTP путь является директорией, то по умолчанию будет выведен список файлов в ней:
> curl -u username:password -O ftp://example.com/public_html/
Выгрузить файл на FTP-сервер
> curl -u username:password -T file.zip ftp://example.com/
Получить вывод из стандартного ввода и сохранить содержимое на сервере под именем data.txt
:
> curl -u username:password -T - ftp://example.com/data.txt
Дополнительно:
Поиск: CLI • CURL • Cookie • FTP • GET • HTTP • Linux • POST • URL • Web-разработка • Windows • Форма
5 основных примеров команды Curl
cURL очень полезный инструмент командной строки для передачи данных от или к серверу. Curl поддерживает различные протоколы, такие как FILE, HTTP, HTTPS, IMAP, IMAPS, LDAP, DICT, LDAPS, TELNET, FTP, FTPS, GOPHER, RTMP, RTSP, SCP, SFTP, POP3, POP3S, SMB, SMBS, SMTP, SMTPS, и TFTP.cURL может быть использован самыми различными и интересными способами. С помощью этого инструмента вы можете скачать, загрузить файлы и управлять ими, проверить свой адрес электронной почты, или даже обновлять свой статус на некоторых веб – сайтах социальных медиа или проверить погоду на улице. В этой статье мы рассмотрим пять наиболее полезных и основных видов использования инструмента cURL на любой Linux VPS.
1. Проверьте URL
Одним из наиболее распространенных и простейших применений cURL печатает саму команду, а затем URL, который вы хотите проверить
curl https://domain.ru
Эта команда будет отображать содержимое URL на вашем терминале
2. Сохраните вывод URL в файл
Выход команды cURL может легко сохранить в файл, добавив опцию -o в команде, как показано ниже
curl -o website https://domain.ru % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 41793 0 41793 0 0 275k 0 --:--:-- --:--:-- --:--:-- 2.9M
В этом примере, вывод будет сохранен в файл с именем ‘website’ в текущем рабочем каталоге.
3. Загрузка файлов с помощью Curl
Вы можете скачивать файлы при помощи Curl, путем добавления опции -o к команде. Он используется для сохранения файлов на локальном сервере с теми же именами, как и на удаленном сервере
curl -O https://domain.ru/file.zip
В этом примере архив ‘file.zip’ будет загружен в текущий рабочий каталог.
Вы также можете загрузить файл с другим именем, добавив опцию -o к cURL.
curl -o archive.zip https://domain.ru/file.zip
Таким образом, архив ‘file.zip’ будет загружен и сохранен как ‘Archive.zip’.
cURL может быть также использован для загрузки нескольких файлов одновременно, как показано в приведенном ниже примере
curl -O https://domain.ru/file.zip -O https://domain.com/file2.zip
Curl также можно использовать для загрузки файлов надежно через SSH с помощью следующей команды
curl -u user sftp://server.domain.ru/path/to/file
Обратите внимание, что вы должны использовать полный путь к файлу, который требуется загрузить
4. Взять информацию из заголовка HTTP веб-сайта
Вы можете легко получить информацию заголовка HTTP из любого веб-сайта, добавив опцию -I (‘i’) к cURL.
curl -I http://domain.ru HTTP/1.1 200 OK Date: Sun, 16 Oct 2016 23:37:15 GMT Server: Apache/2.4.23 (Unix) X-Powered-By: PHP/5.6.24 Connection: close Content-Type: text/html; charset=UTF-8
5. Доступ к FTP-серверу
Чтобы получить доступ к FTP-серверу с помощью Curl, надо использовать следующую команду
curl ftp://ftp.domain.ru --user username:password
Curl будет подключаться к FTP-серверу и выведет список всех файлов и каталогов в домашнем каталоге пользователя
Вы можете скачать файл с помощью FTP
curl ftp://ftp.domain.ru/file.zip --user username:password
и загрузить файл на сервер FTP
curl -T file.zip ftp://ftp.domain.ru/ --user username:password
Вы можете проверить страницу Curl вручную, чтобы увидеть все доступные опции cURL и его функциональные возможности
man curl
PS. Если вам понравился этот пост, пожалуйста поделитесь им с друзьями в социальных сетях с помощью кнопок ниже или просто оставьте комментарий. Благодарю.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
11 примеров использование команд cURL в режиме реального времени
cURL — инструмент командной строки для получения или отправки данных с использованием синтаксиса URL.
Если вы работаете в службе поддержки, то должны уметь использовать команды cURL для устранения неполадок веб-приложений. cURL — кроссплатформенная утилита для Windows, MAC и UNIX.
Ниже приведены некоторые часто используемые примеры синтаксиса.
Если вы работаете в UNIX-системе и пытаетесь подключиться к внешнему URL-адресу, то сначала проверьте наличие доступа к ресурсу через curl. Для этого используйте следующую команду:
Если нужно сохранить содержимое URL или URI в конкретном файле, используйте следующий синтаксис:
# curl yoururl.com > yoururl.html
Например:
[root@localhost]# curl 74.125.68.100 >/tmp/google.html
Приведенный выше пример сохранит все содержимое с хоста 74.125.68.100 в файл /tmp/google.html.
Если хотите удостовериться, что получаете ожидаемый заголовок запроса и ответа, используйте следующую команду:
например:
[root@localhost ]# curl -v 74.125.68.100 * About to connect() to 74.125.68.100 port 80 (#0) * Trying 74.125.68.100... * Connected to 74.125.68.100 (74.125.68.100) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.29.0 >Host: 74.125.68.100 >Accept: */* >< HTTP/1.1 200 OK <Date: Sun, 18 Jan 2015 06:02:58 GMT <Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=ISO-8859-1 < Set-Cookie: NID=67=EZH_o3sPvCSnxzVatz21OHv_; expires=Mon, 20-Jul-2015 06:02:58 GMT; path=/; domain=.; HttpOnly < P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for moreinfo." < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN <Alternate-Protocol: 80:quic,p=0.02 <Accept-Ranges: none <Vary: Accept-Encoding <Transfer-Encoding: chunked
Если нужно узнать, сколько времени требуется для загрузки с определенной скоростью, то используйте следующую команду:
# curl –-limit-rate 2000B
например:
# curl –-limit-rate 2000B 74.125.68.100
Если необходимо проверить, можно ли использовать прокси-сервер, примените следующий синтаксис:
# curl --proxyyourproxy:port http://yoururl.com
Для устранения конкретной проблемы можно использовать Curl, чтобы вставить в header свои данные. Рассмотрим следующий пример запроса с Content-Type:
# curl --header 'Content-Type: application/json' http://yoururl.com
Мы просим curl передать Content-Type в качестве application / json в заголовок запроса.
Вы можете добавить заголовок к запросу с помощью синтаксиса — header.
# curl –-header “X-CustomHeader: GeekFlare” http://yoururl.com
например:
[root@localhost]# curl -v --header "X-CustomHeader: GeekFlare" 74.125.68 * About to connect() to 74.125.68.100 port 80 (#0) * Trying 74.125.68.100... * Connected to 74.125.68.100 (74.125.68.100) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.29.0 >Host: 74.125.68.100 >Accept: */* > X-CustomHeader: GeekFlare >< HTTP/1.1 200 OK <Date: Sun, 18 Jan 2015 08:30:25 GMT <Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=ISO-8859-1 < Set-Cookie: NID=67=CkzDX-zTtWA0d9M1QVG4O3Im; expires=Mon, 20-Jul-2015 08:30:25 GMT; path=/; domain=.; HttpOnly < P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for moreinfo." < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN <Alternate-Protocol: 80:quic,p=0.02 <Accept-Ranges: none <Vary: Accept-Encoding <Transfer-Encoding: chunked
Если вы хотите быстро проверить заголовок ответа, то для этого можно использовать следующий синтаксис.
# curl --head http://yoururl.com
Пример:
[root@localhost]# curl -I 74.125.68.100 HTTP/1.1 200 OK Date: Sun, 18 Jan 2015 08:31:22 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 Set-Cookie: NID=67=SpnXKTDUhw7QGakIeLxmDSF; expires=Mon, 20-Jul-2015 08:31:22 GMT; path=/; domain=.; HttpOnly P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for moreinfo." Server: gws X-XSS-Protection: 1; mode=block X-Frame-Options: SAMEORIGIN Alternate-Protocol: 80:quic,p=0.02 Transfer-Encoding: chunked Accept-Ranges: none Vary: Accept-Encoding [root@localhost ]#
Если необходимо получить доступ к https URL-адресу, который выдает ошибку сертификата из-за несоответствия имени хоста, можно использовать следующий синтаксис.
curl --insecure https://yoururl.com
Чтобы подключиться к URL- адресу только по протоколу SSL V2 / V3 или TLS,используйте следующий синтаксис.
Для подключения с использованием SSLV2:
# curl --sslv2 https://yoururl.com
Для подключения с использованием SSLV3:
# curl --sslv3 https://yoururl.com
Для подключения через TLS:
# curl --tlsv1 https://yoururl.com
С помощью cURL можно загрузить файл с ftp-сервера, указав имя пользователя и пароль.
# curl -u user:password -O ftp://ftpurl/style.css
Всегда можно использовать «-v» с любым синтаксисом для вывода в подробном режиме.
Да, это возможно. Вы можете выполнить cURL удаленно с помощью следующих инструментов.
Online CURL — компактный инструмент для извлечения URL-адреса онлайн и добавления следующих параметров.
--connect-timeout --cookie --data --header --head --location --max-time --proxy --request --user --url --user-agent
Пример вывода:
cURL command line builder–позволяет создать команду cURL, с помощью которой можно ввести информацию в пользовательский интерфейс.
cURL — полезная утилита для устранения проблем с подключением в режиме реального времени.
Данная публикация представляет собой перевод статьи «11 cURL Command Usage with Real-Time Example» , подготовленной дружной командой проекта Интернет-технологии.ру
Введение в curl и его установка
Toggle navigation Курс по документированию API- Nav
- GitHub
- Original course
- Feedback
- Learnapidoc-ru 2.0
- Release notes
- Release notes
- Введение в REST API
- О модуле
- Коротко о курсе
- Обзор курса
- Для чего этот курс
- Об авторе курса
- Знакомство с документацией REST API
- Что такое REST API
- Видео презентации
- Презентации курса
- Практические занятия
- Практика «Определение цели»
- Используем API как разработчики
- О модуле
- Сценарий использования API сервиса прогноза погоды
- Получение ключей авторизации
- Отправка запросов в Postman
- Введение и установка curl
- Создание curl запроса
- Понимание curl
- Использование методов с curl
- Анализ JSON ответов
- Изучение полезных данных JSON ответа
- Доступ и вывод на страницу определенного значения JSON
- Погружение в точечную нотацию
- Документирование конечных точек
- О модуле
- Документирование новой конечной точки
- Обзор пошагового описания API ссылки
- Шаг 1 «Описание ресурса»
- Шаг 2 «Конечные точки и методы»
- Шаг 3 «Параметры»
- Шаг 4 «Пример запроса»
- Шаг 5 «Пример и схема ответа»
- Собираем все вместе
- Практическое занятие «Что не так в разделе API?»
- Практическое занятие «Поиск open-source проекта»
- Практическое занятие «Оценка ключевых элементов API документации»
- Спецификация OpenAPI и Swagger
- О модуле
- Обзор форматов спецификаций REST API
- Знакомство со спецификациями OpenAPI и Swagger
- Работа в YAML
- Обзор руководства OpenAPI 3.0
- Шаг 1 «Объект openapi»
- Шаг 2 «Объект info»
- Шаг3 «Объект servers»
Что JavaScript-разработчику следует знать о Curl / Хабр
Доброго времени суток, друзья!Представляю Вашему вниманию перевод статьи «What JavaScript Developers Should Know About Curl» автора Valery Karpov.
Curl — это популярный инструмент командной строки, часто используемый для отправки HTTP-запросов. Curl поддерживает большое количество протоколов, однако как Node.js-разработчик вы, скорее всего, будете использовать его для отпраки http-запросов к RESTful API.
Документация curl представляет собой перечень из 383 флагов командной строки, поэтому в ней очень трудно найти то, что ищешь. В этой статье я хочу поделиться с вами некоторыми часто используемыми мной шаблонами. Для примеров будет использоваться сервис httpbin.org.
Отправка http-запроса
Для начала убедитесь в том, что у вас установлен curl, выполнив команду
curl --version
.$ curl --version
curl 7.58.0 (x86_64-pc-linux-gnu) libcurl/7.58.0 OpenSSL/1.1.1 zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 (+libidn2/2.0.4) nghttp2/1.30.0 librtmp/2.3
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
Для отправки запроса необходимо запустить
curl url
. Например, для отправки GET-запроса к https://httpbin.org/get?answer=42
следует запустить curl https://httpbin.org/get?answer=42
.$ curl https://httpbin.org/get?answer=42
{
"args": {
"answer": "42"
},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.58.0",
"X-Amzn-Trace-Id": "Root=1-5ee8d737-b39c6a466892725bbb52b916"
},
"origin": "69.84.111.39",
"url": "https://httpbin.org/get?answer=42"
}
После успешного завершения запроса curl возвращает тело http-ответа. Для того, чтобы заставить curl вернуть весь ответ, включая заголовки, используйте флаг -i.
$ curl -i https://httpbin.org/get?answer=42
HTTP/2 200
date: Tue, 16 Jun 2020 14:30:57 GMT
content-type: application/json
content-length: 801
server: istio-envoy
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 2
{
"args": {
"answer": "42"
},
"headers": {
"Accept": "*/*",
"Content-Length": "0",
"Host": "httpbin.org",
"User-Agent": "curl/7.58.0",
"X-Amzn-Trace-Id": "Root=1-5ee8d7a1-cb3954c09299eb9e0dff70a6",
"X-B3-Parentspanid": "dffc55451e64b5fc",
"X-B3-Sampled": "0",
"X-B3-Spanid": "8e233a863fb18b6c",
"X-B3-Traceid": "45bd12a9067fb5c0dffc55451e64b5fc",
"X-Envoy-External-Address": "10.100.91.201",
"X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=c1ff14671b3e24ee794f9a486570abf8ccc9d622846611d3f91a322db4d480cd;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
},
"origin": "69.84.111.39,10.100.91.201",
"url": "http://httpbin.org/get?answer=42"
}
Это полный http-ответ. Заголовками ответа являются строки от
date:
до x-envoy-upstream-service-time:
.Загрузка файлов
Wget — самый распространенный инструмент для загрузки файлов посредством командной строки. Он входит в комплект большинства диструбутивов Linux. Однако в OSX его нет.
Команда wget url
аналогична команде curl -OL url
. Опция -О
— это опция --remote-name
, которая говорит curl сохранить тело ответа в локальном файле. Опция -L
говорит curl следовать перенаправлениям.
Например, ниже представлено изображение с Unsplash, его URL — https://images.unsplash.com/photo-1506812574058-fc75fa93fead
.
Для загрузки этого изобюражения необходимо выполнить следующее:
$ curl -OL https://images.unsplash.com/photo-1506812574058-fc75fa93fead
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12.1M 100 12.1M 0 0 3927k 0 0:00:03 0:00:03 --:--:-- 3927k
Опция
-O
говорит curl использовать строку после последнего /
в качестве имени файла. В приведенном примере изображение будет сохранено в текущей директории с именем photo-1506812574058-fc75fa93fead
. Для определения имени файла используйте опцию -о
(строчная буква «о»).$ curl -o miami-beach.jpg https://images.unsplash.com/photo-1506812574058-fc75fa93fead
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12.1M 100 12.1M 0 0 6083k 0 0:00:02 0:00:02 --:--:-- 6083k
$ ls -l miami-beach-jpg
-rw-rw-r-- 1 val val 12788445 Jun 16 11:03 miami-beach.jpg
Отправка авторизованного запроса
Заголовок авторизации используется для включения в запрос данных для авторизации при обращении к RESTful API. Для добавления указанных данных необходимо использовать флаг
-H
. Например, если ваш ключ интерфейса (API key) my-secret-token
, вы можете включить его в http-запрос следующим образом:$ curl -H "Authorization: my-secret-token" https://httpbin.org/get
{
"args": {},
"headers": {
"Accept": "*/*",
"Authorization": "my-secret-token",
"Host": "httpbin.org",
"User-Agent": "curl/7.58.0",
"X-Amzn-Trace-Id": "Root=1-5ee8e1a5-a3aa30e0765a7980b04ca4a0"
},
"origin": "69.84.111.39",
"url": "https://httpbin.org/get"
}
Обратите внимание, что
httpbin.org
возвращает заголовки http-запроса в теле ответа в свойстве headers
.Curl также поддерживает авторизацию по-умолчанию посредством флага -u
. В следующем примере мы отправляем запрос с именем пользователя user
и паролем pass
:
$ curl -i -u "user:pass" https://httpbin.org/basic-auth/user/pass
HTTP/2 200
date: Tue, 16 Jun 2020 15:18:45 GMT
content-type: application/json
content-length: 47
server: istio-envoy
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 1
{
"authenticated": true,
"user": "user"
}
Вот что происходит при отправке неправильного имени пользователя или пароля:
$ curl -i -u "user:wrongpass" https://httpbin.org/basic-auth/user/pass
HTTP/2 401
date: Tue, 16 Jun 2020 15:18:51 GMT
content-length: 0
server: istio-envoy
www-authenticate: Basic realm="Fake Realm"
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 12
Отправка POST-запроса, содержащего JSON
Флаг
-X
говорит curl, какой метод следует использовать: PUT, POST и т.д. По-умолчанию curl использует метод GET, поэтому писать curl -X GET
не нужно.Флаг -X
часто используется совместно с флагом -d
, позволяющим добавить тело запроса. В следующем примере показано как отправить POST-запрос, содержащий некоторый json:
$ curl -X POST -d '{"answer":42}' https://httpbin.org/post
{
"args": {},
"data": "",
"files": {},
"form": {
"{\"answer\":42}": ""
},
"headers": {
"Accept": "*/*",
"Content-Length": "13",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.58.0",
"X-Amzn-Trace-Id": "Root=1-5ee8e3fd-8437029087be44707bd15320",
"X-B3-Parentspanid": "2a739cfc42d28236",
"X-B3-Sampled": "0",
"X-B3-Spanid": "8bdf030613bb9c8d",
"X-B3-Traceid": "75d84f317abad5232a739cfc42d28236",
"X-Envoy-External-Address": "10.100.91.201",
"X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=ea8c3d70befa0d73aa0f07fdb74ec4700d42a72889a04630741193548f1a7ae1;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
},
"json": null,
"origin": "69.84.111.39,10.100.91.201",
"url": "http://httpbin.org/post"
}
Обратите внимание, что по-умолчанию значением заголовка
Content-Type
является application/x-www-form-urlencoded
. Для json это является неверным, поэтому для определения Content-Type
следует использовать флаг -H
:$ curl -X POST -d '{"answer":42}' -H "Content-Type: application/json" https://httpbin.org/post
{
"args": {},
"data": "{\"answer\":42}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "13",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.58.0",
"X-Amzn-Trace-Id": "Root=1-5ee8e45e-ad875af4f83efd4379b86c34",
"X-B3-Parentspanid": "5f4f33d1c5ea13aa",
"X-B3-Sampled": "0",
"X-B3-Spanid": "a062c9bf2ebfd4bd",
"X-B3-Traceid": "44aa8d62412ae34d5f4f33d1c5ea13aa",
"X-Envoy-External-Address": "10.100.86.47",
"X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=2f0b3331fe4d512975b4b82583a55dd5d1196023d0dfce9e0abed246991c5b67;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
},
"json": {
"answer": 42
},
"origin": "69.84.111.39,10.100.86.47",
"url": "http://httpbin.org/post"
}
Отправка PUT-запроса, содержащего JSON-файл
Флаг
-d
также поддерживает отправку данных из локальных файлов.Например, представим, что у нас есть файл data.js
, содержащий такие данные:
{"answer": 42}
Для отправки PUT-запроса с этим файлом в качестве тела запроса вы можете присвоить флагу
-d
значение @data.json
. Префикс @
говорит curl загрузить тело запроса из файла data.json
:$ curl -X PUT -d '@data.json' -H "Content-Type: application/json" https://httpbin.org/put
{
"args": {},
"data": "{\"answer\":42}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "13",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.58.0",
"X-Amzn-Trace-Id": "Root=1-5ee8e745-37c4ef06326b7b4354a16b94",
"X-B3-Parentspanid": "a4f8f91f4f1b051e",
"X-B3-Sampled": "0",
"X-B3-Spanid": "a018b1a3fcebdc68",
"X-B3-Traceid": "7b48b01dc3f632eea4f8f91f4f1b051e",
"X-Envoy-External-Address": "10.100.91.201",
"X-Forwarded-Client-Cert": "By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=6035260d9d551af6c1907270653214e8d3195abbdd19078c1c84fd9a4106f260;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"
},
"json": {
"answer": 42
},
"origin": "69.84.111.39,10.100.91.201",
"url": "http://httpbin.org/put"
}
Заключение
Резюмируя, вот опции curl, которые я нахожу самыми полезными:
-X
определяет метод запроса, например,curl -X POST url
-d
определяет тело запроса в виде строки в PUT и POST-запросах. Используйте@
для извлечения данных из файла-H
определяет заголовок запроса, например,curl -H "Authorization: my-secret-token" url
-u
аутентификационные данные для стандартной авторизации-O
сохраняет тело запроса в файл-i
показывает полный ответ, включая заголовки
Curl — полезный инструмент взаимодействия с API посредством командной строки, независимо от того, сторонний это API или API, который вы разрабатываете. Для быстрого тестирования curl подходит лучше, чем Axios в Node.js или настройка запроса в Postman, если вы знакомы с их синтаксисом.
Благодарю за потраченное время. Надеюсь, оно было потрачено не зря.
curl — Как использовать
НАЗВАНИЕ
curl — передать URL-адрес
ОБЗОР
curl [параметры / URL]
ОПИСАНИЕ
curl — это инструмент для передачи данных с сервера или на сервер с использованием одного из поддерживаемых протоколов (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). Команда предназначена для работы без взаимодействия с пользователем.
curl предлагает множество полезных приемов, таких как поддержка прокси, аутентификация пользователей, загрузка FTP, HTTP-сообщения, SSL-соединения, файлы cookie, возобновление передачи файлов, Metalink и многое другое.Как вы увидите ниже, от количества функций у вас закружится голова!
curl поддерживается libcurl для всех функций, связанных с передачей данных. Подробности смотрите в libcurl (3).
URL
Синтаксис URL-адреса зависит от протокола. Вы найдете подробное описание в RFC 3986.
Вы можете указать несколько URL-адресов или частей URL-адресов, написав наборы частей в фигурных скобках и указав URL-адрес в кавычки, как в:
«http: // site. {One, two, three} .com»
или вы можете получить последовательности буквенно-цифровых серий, используя [] как в:
«ftp: // ftp.example.com/file[1-100 visible.txt »
«ftp://ftp.example.com/file[001-100 impression.txt» (с ведущими нулями)
«ftp://ftp.example.com/file[a-zpting.txt»
Вложенные последовательности не поддерживаются, но вы можете использовать несколько последовательностей рядом друг с другом:
«http://example.com/archive[1996–1999–/vol[1–4 ]/part{a,b,c}.html»
Вы можете указать любое количество URL-адресов в командной строке. Они будут извлекаться последовательно в указанном порядке. Вы можете указывать параметры командной строки и URL-адреса в любом порядке в командной строке.
Вы можете указать счетчик шагов для диапазонов, чтобы получать каждое N-е число или букву:
«http://example.com/file[1-100:10 impression.txt»
«http://example.com/file[a-z:2 impression.txt»
При использовании последовательностей [] или {} при вызове из командной строки вам, вероятно, придется заключить полный URL-адрес в двойные кавычки, чтобы оболочка не вмешивалась в него. То же самое относится и к другим специальным символам, например, ‘&’, ‘?’ и ‘*’.
Укажите индекс зоны IPv6 в URL-адресе с экранированным знаком процента и именем интерфейса.Как в
«http: // [fe80 :: 3% 25eth0] /»
Если вы укажете URL без префикса protocol: //, curl попытается угадать, какой протокол вам нужен. Затем он по умолчанию будет использовать HTTP, но попробуйте другие протоколы на основе часто используемых префиксов имени хоста. Например, для имен хостов, начинающихся с «ftp». curl предполагает, что вы хотите говорить по FTP.
curl сделает все возможное, чтобы использовать то, что вы ему передаете, в качестве URL-адреса. Он никоим образом не пытается проверить его как синтаксически правильный URL, а вместо этого очень либерально относится к тому, что он принимает.
curl будет пытаться повторно использовать соединения для передачи нескольких файлов, поэтому получение большого количества файлов с одного сервера не приведет к многократным соединениям / рукопожатиям. Это увеличивает скорость. Конечно, это делается только для файлов, указанных в одной командной строке, и не может использоваться между отдельными вызовами curl.
ПРОТОКОЛЫ
curl поддерживает множество протоколов или в терминах URL: схем. Ваша конкретная сборка может не поддерживать их все.
DICT
Позволяет искать слова с помощью онлайн-словарей.
ФАЙЛ
Чтение или запись локальных файлов. curl не поддерживает удаленный доступ к URL-адресу file: //, но при работе в Microsft Windows будет работать собственный подход UNC.
FTP (S)
curl поддерживает протокол передачи файлов с множеством настроек и рычагов. С использованием TLS или без него.
Гофер
Получить файлы.
HTTP (S)
curl поддерживает HTTP с множеством опций и вариаций. Он может говорить по протоколу HTTP версии 0.9, 1.0, 1.1, 2 и 3 в зависимости от параметров сборки и правильных параметров командной строки.
IMAP (S)
Используя протокол чтения почты, curl может «загружать» письма за вас. С использованием TLS или без него.
LDAP (S)
curl может выполнять поиск в каталогах за вас, с TLS или без него.
млн. Кв.
curl поддерживает MQTT версии 3. Загрузка через MQTT равняется «подписке» на тему, в то время как загрузка / публикация равняется «публикации» в теме. Поддержка MQTT является экспериментальной, а MQTT на основе TLS не поддерживается (пока).
POP3 (S)
Скачивание с сервера pop3 означает получение почты. С использованием TLS или без него.
RTMP (S)
Протокол обмена сообщениями в реальном времени в основном используется для потоковой передачи мультимедиа на сервер, и curl может его загрузить.
RTSP
curl поддерживает загрузку RTSP 1.0.
SCP
curl поддерживает передачу scp по SSH версии 2.
SFTP
curl поддерживает SFTP (черновик 5) через SSH версии 2.
SMB (S)
curl поддерживает SMB версии 1 для загрузки и выгрузки.
SMTP (S)
Загрузка содержимого на SMTP-сервер означает отправку электронного письма. С TLS или без него.
ТЕЛНЕТ
Указание curl получить URL-адрес telnet запускает интерактивный сеанс, в котором он отправляет прочитанное на стандартный ввод и выводит то, что отправляет сервер.
TFTP
curl может выполнять загрузки и выгрузки по TFTP.
СЧЕТЧИК ПРОГРЕССА
curl обычно отображает индикатор выполнения во время операций, показывая объем переданных данных, скорость передачи, приблизительное оставшееся время и т. Д.Индикатор выполнения отображает количество байтов, а скорость указывается в байтах в секунду. Суффиксы (k, M, G, T, P) имеют размер 1024. Например, 1 КБ — 1024 байта. 1M составляет 1048576 байт.
curl отображает эти данные на терминал по умолчанию, поэтому, если вы вызываете curl для выполнения операции, и он собирается записать данные в терминал, он отключает индикатор выполнения, так как в противном случае он испортит индикатор выполнения микширования вывода и ответ данные.
Если вам нужен индикатор выполнения для запросов HTTP POST или PUT, вам необходимо перенаправить вывод ответа в файл, используя перенаправление оболочки (>), -o, —output или подобное.
Это не тот случай загрузки по FTP, поскольку эта операция не передает никаких данных ответа на терминал.
Если вы предпочитаете индикатор выполнения вместо обычного индикатора, — #, —progress-bar — ваш друг. Вы также можете полностью отключить индикатор выполнения с помощью параметра -s, —silent.
ОПЦИИ
Опции начинаются с одного или двух тире. Многие параметры требуют рядом с собой дополнительного значения.
Короткая форма опций с одним дефисом, например -d, может использоваться с пробелом или без него между ним и его значением, хотя пробел является рекомендуемым разделителем.Например, длинная форма с двойным тире, -d, —data, требует пробела между ней и ее значением.
Параметры короткой версии, которые не нуждаются в дополнительных значениях, могут использоваться непосредственно рядом друг с другом, например, вы можете указать все параметры -O, -L и -v одновременно как -OLv.
Как правило, все логические параметры включаются с помощью —option и снова отключаются с помощью —no-option. То есть вы используете то же самое имя опции, но с префиксом «no-». Однако в этом списке мы в основном перечисляем и показываем их версию —option.(Эта концепция с параметрами —no была добавлена в 7.19.0. Ранее большинство параметров включались / выключались при повторном использовании одного и того же параметра командной строки.)
—abstract-unix-socket <путь>
(HTTP) Подключение через абстрактный сокет домена Unix вместо использования сети. Примечание: netstat показывает путь к абстрактному сокету с префиксом ‘@’, однако аргумент
Добавлено в 7.53.0.
—alt-svc <имя файла>
(HTTPS) ВНИМАНИЕ: это экспериментальная опция.Не использовать в производстве.
Эта опция включает синтаксический анализатор alt-svc в curl. Если имя файла указывает на существующий файл кэша alt-svc, он будет использован. После завершения передачи кеш будет снова сохранен с именем файла, если он был изменен.
Укажите «» имя файла (нулевой длины), чтобы избежать загрузки / сохранения, и пусть curl просто обрабатывает кеш в памяти.
Если эта опция используется несколько раз, curl загрузит содержимое из всех файлов, но последний из них будет использоваться для сохранения.
Добавлено в 7.64.1.
—аньяут
(HTTP) Указывает curl самостоятельно определить метод аутентификации и использовать наиболее безопасный, который, по утверждениям удаленного сайта, поддерживает. Для этого сначала выполняется запрос и проверяются заголовки ответов, что может вызвать дополнительный сетевой обход. Это используется вместо установки определенного метода аутентификации, который вы можете сделать с помощью —basic, —digest, —ntlm и —negotiate.
Использование —anyauth не рекомендуется, если вы выполняете загрузку со стандартного ввода, так как это может потребовать, чтобы данные были отправлены дважды, а затем клиент должен иметь возможность перемотки назад.Если возникнет необходимость при загрузке со стандартного ввода, операция загрузки завершится ошибкой.
Используется вместе с -u, —user.
См. Также —proxy-anyauth и —basic и —digest.
-a, —append
(FTP SFTP) При использовании в выгрузке curl добавляется к целевому файлу вместо его перезаписи. Если удаленного файла не существует, он будет создан. Обратите внимание, что этот флаг игнорируется некоторыми серверами SFTP (включая OpenSSH).
— базовый
(HTTP) Указывает curl использовать базовую аутентификацию HTTP с удаленным хостом.Это значение по умолчанию, и эта опция обычно бессмысленна, если вы не используете ее для переопределения ранее установленной опции, которая устанавливает другой метод аутентификации (например, —ntlm, —digest или —negotiate).
Используется вместе с -u, —user.
См. Также —proxy-basic.
—cacert <файл>
(TLS) Указывает curl использовать указанный файл сертификата для проверки однорангового узла. Файл может содержать несколько сертификатов CA. Сертификат (ы) должен быть в формате PEM. Обычно curl создается для использования для этого файла по умолчанию, поэтому этот параметр обычно используется для изменения этого файла по умолчанию.
curl распознает переменную среды с именем «CURL_CA_BUNDLE», если она установлена, и использует данный путь в качестве пути к набору сертификатов CA. Эта опция переопределяет эту переменную.
Версия curl для Windows будет автоматически искать файл сертификатов CA с именем ´curl-ca-bundle.crt´ либо в том же каталоге, что и curl.exe, либо в текущем рабочем каталоге, либо в любой папке по пути PATH .
Если curl построен на основе библиотеки NSS SSL, модуль NSS PEM PKCS # 11 (libnsspem.поэтому) должен быть доступен для правильной работы этой опции.
(только для iOS и macOS) Если curl создан для Secure Transport, то этот параметр поддерживается для обратной совместимости с другими механизмами SSL, но не должен устанавливаться. Если этот параметр не установлен, то curl будет использовать сертификаты в системе и связку ключей пользователя для проверки однорангового узла, что является предпочтительным методом проверки цепочки сертификатов однорангового узла.
(только Schannel) Эта опция поддерживается для Schannel в Windows 7 или новее с libcurl 7.60 или новее. Эта опция поддерживается для обратной совместимости с другими механизмами SSL; вместо этого рекомендуется использовать хранилище корневых сертификатов Windows (по умолчанию для Schannel).
Если эта опция используется несколько раз, будет использован последний.
—capath <каталог>
(TLS) Указывает curl использовать указанный каталог сертификатов для проверки однорангового узла. Можно указать несколько путей, разделив их знаком «:» (например, «путь2: путь3: путь4»). Сертификаты должны быть в формате PEM, и если curl построен на OpenSSL, каталог должен быть обработан с помощью утилиты c_rehash, поставляемой с OpenSSL.Использование —capath может позволить curl на основе OpenSSL устанавливать SSL-соединения намного более эффективно, чем использование —cacert, если файл —cacert содержит много сертификатов CA.
Если этот параметр установлен, значение capath по умолчанию будет проигнорировано, а если оно используется несколько раз, будет использоваться последнее.
—серт-статус
(TLS) Указывает curl на необходимость проверки статуса сертификата сервера с помощью расширения TLS запроса статуса сертификата (также известного как OCSP stapling).
Если эта опция включена и сервер отправляет недопустимый (например,грамм. expired), если ответ предполагает, что сертификат сервера был отозван или ответ вообще не получен, проверка не выполняется.
В настоящее время это реализовано только в бэкэндах OpenSSL, GnuTLS и NSS.
Добавлено в версии 7.41.0.
—сертификационный <тип>
(TLS) Сообщает curl, какой тип использует предоставленный сертификат клиента. PEM, DER, ENG и P12 являются признанными типами. Если не указано, предполагается PEM.
Если эта опция используется несколько раз, будет использован последний.
См. Также -E, —cert и —key и —key-type.
-E, —cert <сертификат [: пароль]>
(TLS) Указывает curl использовать указанный файл сертификата клиента при получении файла с HTTPS, FTPS или другим протоколом на основе SSL. Сертификат должен быть в формате PKCS # 12 при использовании Secure Transport или в формате PEM при использовании любого другого механизма. Если дополнительный пароль не указан, он будет запрошен на терминале. Обратите внимание, что эта опция предполагает, что файл «сертификата», который является закрытым ключом и сертификатом клиента, объединен! См. -E, —cert и —key, чтобы указать их независимо.
Если curl построен на основе библиотеки SSL NSS, то эта опция может указать curl псевдоним сертификата для использования в базе данных NSS, определяемый переменной среды SSL_DIR (или по умолчанию / etc / pki / nssdb). Если доступен модуль NSS PEM PKCS # 11 (libnsspem.so), то файлы PEM могут быть загружены. Если вы хотите использовать файл из текущего каталога, поставьте перед ним префикс «./», чтобы избежать путаницы с псевдонимом. Если псевдоним содержит «:», ему должен предшествовать «\», чтобы он не распознавался как разделитель пароля.Если псевдоним содержит «\», его нужно экранировать как «\\», чтобы он не распознавался как escape-символ.
Если curl построен на основе библиотеки OpenSSL, а файл
.Как использовать 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
, вы можете получить только заголовки, а не тело ответа:
завиток -I https://flaviocopes.com/
Выполнить запрос HTTP POST
Параметр X
позволяет изменить используемый метод HTTP.По умолчанию используется GET, аналогично записи
curl -X ПОЛУЧИТЬ https://flaviocopes.com/
Использование -X POST
выполнит запрос POST.
Вы можете выполнить запрос POST с передачей данных в кодировке URL:
curl -d "option = value & something = anothervalue" -X POST https://flaviocopes.com/
В этом случае отправляется application / x-www-form-urlencoded
Content-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.ru / index.html
Использование HTTP-аутентификации
Если для ресурса требуется базовая HTTP-аутентификация, вы можете использовать опцию и
для передачи значений user: password:
curl -u пользователь: пройти https://flaviocopes.com/
Установить другой пользовательский агент
Пользовательский агент сообщает серверу, какой клиент выполняет запрос. По умолчанию curl отправляет пользовательский агент curl /
, например: curl / 7.54.0
.
Вы можете указать другой пользовательский агент с помощью параметра --user-agent
:
curl --user-agent "my-user-agent" https://flaviocopes.com
Проверка всех деталей запроса и ответа
Используйте опцию --verbose
, чтобы curl выводил все детали запроса и ответа:
curl --verbose -I https://flaviocopes.com/
* Пробуем 178.128.202.129...
* TCP_NODELAY установлен
* Подключен к flaviocopes.com (178.128.202.129) порт 443 (# 0)
* Подключение TLS 1.2 с использованием TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Сертификат сервера: flaviocopes.com
* Сертификат сервера: Let's Encrypt Authority X3
* Сертификат сервера: DST Root CA X3
> HEAD / HTTP / 1.1
> Хост: flaviocopes.com
> Пользовательский агент: curl / 7.54.0
> Принять: * / *
>
Копирование любого сетевого запроса браузера в команду curl
При проверке любого сетевого запроса с помощью инструментов разработчика Chrome у вас есть возможность скопировать этот запрос в запрос curl:
curl 'https://github.com/curl/curl' -H 'Соединение: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade- Небезопасные запросы: 1 '-H' DNT: 1 '-H' Агент пользователя: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 67.0.3396.99 Safari / 537.36 '-H' Принять: текст / 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 = Gh2.1.933116459.1507545550; _ga = GA1.2.643383860.1507545550; tz = Европа% 2FRome; user_session = XXXXX; __Host-user_session_same_site = ГГГГГГ; dotcom_user = flaviocopes; logged_in = да; has_recent_activity = 1; _gh_sess = ZZZZZZ '- сжатый
.-a , --приложение | ( FTP / SFTP ) При использовании в FTP-загрузке это указывает curl на добавление к целевому файлу вместо его перезаписи. Если файл не существует, он будет создан. Обратите внимание, что этот параметр игнорируется некоторыми серверами SSH, включая OpenSSH. |
-A , --user-agent <строка агента> | ( HTTP ) Укажите строку User-Agent для отправки на HTTP-сервер.Некоторые CGI терпят неудачу, если строка агента не установлена на « Mozilla / 4.0 ». Чтобы закодировать пробелы в строке, заключите строку в одинарные кавычки. Это значение также можно установить с помощью опции -H / --header . Если этот параметр установлен более одного раза, последний будет использован. |
--anyauth | ( HTTP ) Указывает curl самому определить метод аутентификации и использовать наиболее безопасный метод, который, по утверждениям удаленного сайта, поддерживает.Для этого сначала делается запрос и проверяются заголовки ответов, что, возможно, вызывает сетевой обход. Это используется вместо установки определенного метода аутентификации, который вы можете сделать с --basic , --digest , --ntlm и --negotiate . Обратите внимание, что использование --anyauth не рекомендуется, если вы выполняете загрузку со стандартного ввода, поскольку может потребоваться, чтобы данные были отправлены дважды, а затем клиент должен иметь возможность перемотки назад. Если возникнет необходимость при загрузке со стандартного ввода, операция загрузки завершится ошибкой. |
-b , --cookie <имя = данные> | ( HTTP ) Передайте данные на HTTP-сервер в виде файла cookie. Ожидается, что это будут данные, ранее полученные от сервера в строке « Set-Cookie: ». Данные должны быть в формате « ИМЯ1 = ЗНАЧЕНИЕ1; ИМЯ2 = ЗНАЧЕНИЕ2 ». Если в строке не используется символ « = » (равно), он рассматривается как имя файла для чтения из ранее сохраненных строк cookie, которые должны использоваться в этом сеансе, если они совпадают.Использование этого метода также активирует «синтаксический анализатор файлов cookie», который также будет создавать входящие файлы cookie для записи curl, что может быть удобно, если вы используете его в сочетании с параметром --location . Формат файла для чтения файлов cookie должен быть простым заголовком HTTP или форматом файла cookie Netscape / Mozilla. ПРИМЕЧАНИЕ: файл, указанный как -b / --cookie , используется только как входной. Файлы cookie не будут храниться в файле. Для хранения файлов cookie используйте параметр -c / --cookie-jar , или вы можете сохранить заголовки HTTP в файл, используя -D / --dump-header . Если этот параметр установлен более одного раза, последний вхождение будет вариантом, который использовался. |
-B , --use-ascii | ( FTP / LDAP ) Включить передачу ASCII. Для FTP это также может быть выполнено с помощью URL-адреса, заканчивающегося на «; Type = A ». Эта опция приводит к тому, что данные, отправляемые на стандартный вывод, находятся в текстовом режиме для систем win32. Если этот параметр используется дважды, второй отключит использование ASCII. |
- базовый | ( HTTP ) Указывает curl использовать базовую аутентификацию HTTP. Это значение по умолчанию, и этот параметр обычно не имеет смысла, если вы не используете его для переопределения ранее установленного параметра, который устанавливает другой метод аутентификации (например, --ntlm , --digest и --negotiate ). |
- шифров <список шифров> | ( SSL ) Определяет, какие шифры использовать в соединении.Перечисленные шифры должны быть действительными. Вы можете прочитать подробную информацию о списке шифров SSL на openssl.org. ШифрыNSS выполняются иначе, чем OpenSSL и GnuTLS. Полный список шифров NSS находится в записи NSSCipherSuite по этому URL-адресу: https://pagure.io/mod_nss#Directives. Если этот параметр используется несколько раз, последний будет иметь приоритет над другими. |
- сжатый | ( HTTP ) Запросить сжатый ответ, используя один из алгоритмов, поддерживаемых curl , и вернуть несжатый документ.Если этот параметр используется и сервер отправляет неподдерживаемую кодировку, Curl сообщит об ошибке. |
- тайм-аут соединения <секунды> | Максимальное время в секундах, которое может занять соединение с сервером. Это ограничивает только фазу подключения; после подключения curl эта опция больше не применяется. Начиная с версии 7.32.0, эта опция принимает десятичные значения, но фактическое время ожидания будет уменьшаться в точности по мере того, как указанное время ожидания увеличивается в десятичной точности.См. Также опцию -m / --max-time . Если эта опция используется несколько раз, будет использоваться последняя. |
-c , --cookie-jar <имя файла> | ( HTTP ) Укажите, в какой файл вы хотите, чтобы curl записывал все файлы cookie после завершения операции. Curl записывает все файлы cookie, ранее считанные из указанного файла, а также все файлы cookie, полученные с удаленного сервера (ов).Если файлы cookie не известны, файл не будет записан. Файл будет записан с использованием формата файлов cookie Netscape. Если вы установите для имени файла одно тире (« - »), файлы cookie будут записаны в стандартный вывод. Этот параметр командной строки активирует механизм cookie, который заставляет curl записывать и использовать файлы cookie. Другой способ активировать его - использовать параметр -b / --cookie . ПРИМЕЧАНИЕ: Если невозможно создать или записать файл cookie, вся операция curl не завершится ошибкой или даже не сообщит об ошибке.Если указано -v , будет отображаться предупреждение, но это единственная видимая обратная связь, которую вы получите об этой, возможно, фатальной ситуации. Если эта опция используется несколько раз, будет использоваться последнее указанное имя файла. |
-C , --продолжить-на <смещение> | Продолжить / возобновить предыдущую передачу файла с заданным смещением . Данное смещение - это точное количество байтов, которое будет пропущено, отсчитываемое от начала исходного файла до его передачи в место назначения.Если используется для загрузки, команда SIZE ftp-сервера не будет использоваться curl. Используйте « -C - », чтобы указать curl, чтобы он автоматически определял, где и как возобновить передачу. Затем он использует данные файлы вывода / ввода, чтобы выяснить это. Если эта опция используется несколько раз, будет использоваться последняя. |
- создать каталог | При использовании вместе с опцией -o , curl создает необходимую иерархию локальных каталогов по мере необходимости.Эта опция создает каталоги, упомянутые с опцией -o , ничего больше. Если имя файла -o не использует каталог или если упомянутые в нем каталоги уже существуют, каталоги не будут созданы. Чтобы создать удаленные каталоги при использовании FTP или SFTP, попробуйте --ftp-create-dirs . |
--crlf | ( FTP ) Преобразование LF в CRLF при загрузке. Полезно для MVS (OS / 390). |
--crlfile <файл> | ( HTTPS / FTPS ) Предоставляет файл в формате PEM со списком отозванных сертификатов, который может указывать сертификаты одноранговых узлов, которые должны считаться отозванными. Если эта опция используется несколько раз, будет использоваться последняя. (добавлено в 7.19.7) |
-d , --data | ( HTTP ) Отправляет указанные данные в запросе POST на HTTP-сервер способом, который может имитировать, как если бы пользователь заполнил HTML-форму и нажал кнопку отправки.Обратите внимание, что данные отправляются точно так, как указано, без дополнительной обработки (с обрезанными символами новой строки). Ожидается, что данные будут "закодированы по URL". Это заставит curl передать данные на сервер с использованием типа содержимого application / x-www-form-urlencoded . Сравните с -F / --form . Если этот параметр используется более одного раза в одной командной строке, указанные фрагменты данных будут объединены вместе с разделительным символом « и ». Таким образом, при использовании '-d name = daniel -d skill = lousy' будет создан блок POST, который выглядит как 'name = daniel & skill = lousy' . Если вы начинаете данные с символа « @ », оставшаяся часть должна быть именем файла, из которого будут считываться данные, или « - » (тире), если вы хотите, чтобы curl читал данные из стандартного ввода. Содержимое файла уже должно быть закодировано по URL. Также можно указать несколько файлов. Публикация данных из файла с именем 'foobar', таким образом, будет выполняться с помощью « --data @ foo-bar ». -d / --data совпадает с --data-ascii . Чтобы публиковать данные в чисто двоичном формате, вы должны вместо этого использовать параметр --data-binary .Чтобы URL-кодировать значение поля формы, вы можете использовать --data-urlencode . Если этот параметр используется несколько раз, данные, следующие за первым, будут добавлены. |
--data-ascii <данные> | ( HTTP ) Это псевдоним для опции -d / --data . Если этот параметр используется несколько раз, данные, следующие за первым, будут добавлены. |
- двоичные данные <данные> | ( HTTP ) Публикует данные точно так, как указано, без какой-либо дополнительной обработки. Если вы начинаете данные с символа @ , остальные должны быть именем файла. Данные отправляются аналогично тому, как это делает --data-ascii , за исключением того, что символы новой строки сохраняются, а преобразования никогда не выполняются. Если эта опция используется несколько раз, те, которые следуют за первой, будут добавлять данные, как описано в -d , --data . |
--data-urlencode <данные> | ( HTTP ) Публикует данные, аналогично другим параметрам --data, за исключением того, что выполняется кодирование URL. (Добавлено в 7.18.0) Чтобы быть CGI-совместимой, часть должна начинаться с имени, за которым следует разделитель и спецификация содержимого. Часть может быть передана в curl , используя один из следующих синтаксисов: содержание Это заставит curl URL-кодировать контент и передать его дальше.Просто будьте осторожны, чтобы содержимое не содержало символов = или @ , так как это приведет к совпадению синтаксиса с одним из других случаев ниже! = содержание Это заставит curl URL-кодировать контент и передать его дальше. Предыдущий символ = не включается в данные. имя = содержание Это заставит curl URL-кодировать часть содержимого и передать ее дальше. Обратите внимание, что часть имени уже должна быть закодирована в URL. @ имя файла Это заставит curl загружать данные из данного файла (включая любые символы новой строки), кодировать эти данные по URL и передавать их в POST. [адрес электронной почты защищен] Это заставит curl загружать данные из данного файла (включая любые символы новой строки), кодировать эти данные по URL и передавать их в POST. К части имени добавляется знак равенства, в результате получается name = urlencoded-file-content . Обратите внимание, что имя, как ожидается, уже будет закодировано в URL-адресе. |
- делегирование УРОВЕНЬ | Установите УРОВЕНЬ , чтобы сообщить серверу, что ему разрешено делегировать, когда речь идет об учетных данных пользователя. Используется с GSS / kerberos. нет Не разрешать делегирование. политика Делегирует, если и только если в билете службы Kerberos установлен флаг OK-AS-DELEGATE, что является вопросом политики области. всегда Безоговорочно разрешить |
curl - Урок
HTTP-сценарии
1.1 Общие сведения
1.2 Протокол HTTP
1.3 См. Протокол
1.4 См. Синхронизацию
1.5 См. Ответ
URL
2.1 Спецификация
2.2 Хост
2.3 Номер порта
2.4 Имя пользователя и пароль
2.5 Часть пути
Получить страницу
3.1 GET
3.2 HEAD
3.3 Несколько URL-адресов в одной командной строке
3.4 Несколько HTTP-методов в одной командной строке
HTML-формы
4.1 Объяснение форм
4.2 GET
4.3 POST
4.4 Загрузка файла POST
4.5 Скрытые поля
4.6 Выяснение того, как выглядит POST
HTTP-загрузка
5.1 PUT
HTTP-аутентификация
6.1 Базовая аутентификация
6.2 Другая аутентификация
6.3 Аутентификация прокси
6.4 Скрытие учетных данных
Другие заголовки HTTP
7.1 Referer
7.2 Пользовательский агент
Перенаправляет
8.1 Заголовок местоположения
8.2 Другие перенаправления
Файлы cookie
9.1 Основы cookie
9.2 Параметры cookie
HTTPS
10.1 HTTPS - это протокол безопасности HTTP
10.2 Сертификаты
Пользовательские элементы запроса
11.1 Изменить метод и заголовки
11.2 Подробнее об измененных методах
Веб-вход
12.1 Некоторые приемы входа в систему
Отладка
13.1 Некоторые приемы отладки
Ссылки
14.1 Стандарты
14.2 Сайты
1. HTTP-сценарии
1.1 Фон
Этот документ предполагает, что вы знакомы с HTML и общими сетями.
Увеличивающееся количество приложений, перемещающихся в Интернет, заставило HTTP Сценарии "чаще запрашиваются и требуются. Чтобы иметь возможность автоматически извлекать информацию из Интернета, фальсифицировать пользователей, публиковать или загружать данные на веб-серверы - это все важные задачи сегодня.
Curl - это инструмент командной строки для выполнения всевозможных манипуляций с URL-адресами и переводы, но этот конкретный документ будет посвящен тому, как его использовать, когда выполнение HTTP-запросов для развлечения и прибыли.Я предполагаю, что ты знаешь как вызовите curl --help или curl --manual, чтобы получить основную информацию о нем.
Curl написан не для того, чтобы делать все за вас. Он делает запросы, он получает данные, он отправляет данные и извлекает информацию. Тебе наверное понадобится склеить все вместе, используя какой-то скриптовый язык или повторить ручные вызовы.
1.2 Протокол HTTP
HTTP - это протокол, используемый для получения данных с веб-серверов. Это очень просто протокол, построенный на TCP / IP.Протокол также позволяет информации будут отправлены на сервер от клиента, используя несколько разных методов, а также быть показано здесь.
HTTP - это простые текстовые строки ASCII, отправляемые клиентом на сервер для запросить конкретное действие, а затем сервер отвечает несколькими текстовыми строками до того, как фактическое запрошенное содержимое будет отправлено клиенту.
Клиент curl отправляет HTTP-запрос. Запрос содержит метод (например, GET, POST, HEAD и т. Д.), Несколько заголовков запроса, а иногда и запрос тело.HTTP-сервер отвечает строкой состояния (указывающей, ну), заголовки ответа и чаще всего также тело ответа. Часть "тела" это обычные данные, которые вы запрашивали, например, фактический HTML или изображение и т. д.
1.3 См. Протокол
Использование параметра curl --verbose (сокращенно -v) покажет, какой тип команд, которые curl отправляет на сервер, а также несколько других информационных тексты.
--verbose - самый полезный параметр, когда дело доходит до отладки или даже понять взаимодействие сервера curl <->.
Иногда даже --verbose недостаточно. Затем --trace и --trace-ascii предлагают даже больше деталей, поскольку они показывают ВСЕ, что curl отправляет и получает. Используй это как это:
curl --trace-ascii debugdump.txt http://www.example.com/
1,4 См. Сроки
Часто вы можете задаться вопросом, что именно занимает все время, или вы просто хотите узнать количество миллисекунд между двумя точками в перевод. Для этих и других подобных ситуаций опция --trace-time это то, что вам нужно.Он добавит время к каждой строке вывода трассировки:
curl --trace-ascii d.txt --trace-time http://example.com/
1.5 См. Ответ
По умолчанию curl отправляет ответ на стандартный вывод. Вам нужно его перенаправить где-то, чтобы этого избежать, чаще всего это делается с помощью -o или -O.
2. URL
2.1 Spec
Формат Uniform Resource Locator - это способ указания адреса конкретный ресурс в Интернете. Вы знаете это, вы видели такие URL-адреса, как https: // завиток.haxx.se или https://yourbank.com миллион раз. RFC 3986 - это каноническая спец. И да, формальное имя - это не URL, а URI.
2.2 Хост
Имя хоста обычно разрешается с помощью DNS или вашего файла / etc / hosts в IP. адрес, и это то, с чем будет связываться curl. В качестве альтернативы вы указываете IP-адрес прямо в URL-адресе вместо имени.
Для разработки и других пробных ситуаций вы можете указать другой IP-адрес для имени хоста, отличный от того, который использовался бы в противном случае, с помощью curl --resolve вариант:
curl --resolve www.example.org:80:127.0.0.1 http://www.example.org/
2.3 Номер порта
Каждый протокол, поддерживаемый curl, работает с номером порта по умолчанию, будь то TCP или в некоторых случаях UDP. Обычно вам не нужно это учитывать рассмотрение, но иногда вы запускаете тестовые серверы на других портах или аналогичный. Затем вы можете указать номер порта в URL-адресе с двоеточием и номер сразу после имени хоста. Как при использовании HTTP для порта 1234:
curl http: // www.example.org:1234/
Номер порта, который вы указываете в URL-адресе, - это номер, который сервер использует для Предлагаю свои услуги. Иногда вы можете использовать локальный прокси, а затем вы можете необходимо указать номер порта этого прокси отдельно для того, что нужно curl подключиться к локально. Как при использовании HTTP-прокси на порту 4321:
curl --proxy http://proxy.example.org:4321 http://remote.example.org/
2.4 Имя пользователя и пароль
Некоторые службы настроены так, чтобы требовать аутентификацию HTTP, и тогда вам необходимо укажите имя и пароль, которые затем передаются на удаленный сайт в различными способами в зависимости от конкретного используемого протокола аутентификации.
Вы можете выбрать либо ввести пользователя и пароль в URL-адрес, либо вы можете предоставьте их отдельно:
curl http: // пользователь: пароль@example.org/
или
curl -u пользователь: пароль http://example.org/
Следует обратить внимание, что такая HTTP-аутентификация - это не то, в наши дни обычно делается и запрашивается на сайтах, ориентированных на пользователя. Oни вместо этого используют формы и файлы cookie.
2,5 Часть пути
Часть пути просто отправляется на сервер, чтобы запросить отправку обратно связанный ответ.Путь - это то, что находится справа от косой черты который следует за именем хоста и, возможно, номером порта.
3. Получить страницу
3.1 GET
Самый простой и наиболее распространенный запрос / операция, выполняемая с использованием HTTP, - это ПОЛУЧЕНИЕ URL. Сам URL-адрес может относиться к веб-странице, изображению или файлу. Клиент отправляет запрос GET на сервер и получает запрошенный документ. Если вы запустите командную строку
curl https://curl.haxx.se
, вы получаете веб-страницу, возвращаемую в окно терминала.Весь HTML-документ что этот URL-адрес.
Все ответы HTTP содержат набор заголовков ответов, которые обычно скрыты, используйте параметр curl --include (-i), чтобы отобразить их, а также остальную часть документ.
3,2 ГОЛОВКА
Вы можете запросить у удаленного сервера ТОЛЬКО заголовки, используя --head (-I) опция, которая заставит curl выдавать запрос HEAD. В некоторых особых случаях серверы отрицают метод HEAD, в то время как другие все еще работают, что является особенным вид раздражения.
Метод HEAD определен и сделан так, чтобы сервер возвращал заголовки точно так же, как это было бы для GET, но без тела. Значит, ты может видеть Content-Length: в заголовках ответа, но не должно быть фактическое тело в ответе HEAD.
3.3 Несколько URL-адресов в одной командной строке
Одна командная строка curl может включать один или несколько URL-адресов. Самый частый случай вероятно, просто использовать один, но вы можете указать любое количество URL-адресов.да любой. Без ограничений. Затем вы будете получать запросы, повторяющиеся снова и снова для всех данные URL.
Пример, отправьте два GET:
curl http://url1.example.com http://url2.example.com
Если вы используете --data для POST к URL-адресу, использование нескольких URL-адресов означает, что вы отправляете тот же POST для всех заданных URL.
Пример, отправьте два сообщения POST:
curl --data name = curl http://url1.example.com http://url2.example.com
3.4 Несколько методов HTTP в одной командной строке
Иногда вам нужно работать с несколькими URL-адресами в одной командной строке и разные методы HTTP для каждого.Для этого вам понравится опция --next. Это По сути, это разделитель, отделяющий несколько вариантов от следующих. Все URL-адреса до --next получат тот же метод и получат все POST данные объединены в один.
Когда curl достигает --next в командной строке, он как бы сбрасывает метод и данные POST и разрешить новый набор.
Возможно, лучше всего это показать на нескольких примерах. Чтобы отправить сначала HEAD, а затем ПОЛУЧИТЬ:
curl -I http: // example.com --next http://example.com
Чтобы сначала отправить POST, а затем GET:
curl -d score = 10 http://example.com/post.cgi --next http://example.com/results.html
4. HTML-формы
4.1 Объяснение форм
Формы- это общий способ, которым веб-сайт может представить HTML-страницу с полями для пользователя для ввода данных, а затем нажмите что-то вроде «ОК» или «Отправить» кнопку, чтобы получить эти данные, отправленные на сервер. Затем сервер обычно использует опубликованные данные, чтобы решить, как действовать.Как использовать введенные слова для поиска в базе данных или для добавления информации в систему отслеживания ошибок отобразите введенный адрес на карте или использование информации в качестве приглашения для входа в систему, подтверждающего, что пользователь разрешено видеть то, что он собирается увидеть.
Конечно, на стороне сервера должна быть какая-то программа для получения данные, которые вы отправляете. Вы не можете просто изобрести что-то из воздуха.
4.2 GET
GET-форма использует метод GET, как указано в HTML, например:
В вашем любимом браузере появится эта форма с текстовым полем для заполнения и нажмите кнопку с надписью «ОК». Если вы введете «1905» и нажмете ОК , ваш браузер создаст для вас новый URL-адрес. URL будет получить "junk.cgi? Birthyear = 1905 & press = OK", добавленный к части пути предыдущий URL.
Если оригинал был замечен на странице www.hotmail.com/when/birth.html ", вторая страница, которую вы получите, станет "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK".
Большинство поисковых систем работают именно так.
Чтобы curl выполнял за вас сообщение формы GET, просто введите ожидаемый созданный URL:
curl "http://www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"
4.3 ПОСТ
Метод GET позволяет отображать все имена полей ввода в поле URL-адреса ваш браузер.Как правило, это хорошо, когда вы хотите иметь возможность добавьте в закладки эту страницу с вашими данными, но это очевидный недостаток если вы ввели секретную информацию в одно из полей или если есть большое количество полей, создающих очень длинный и нечитаемый URL.
Затем протокол HTTP предлагает метод POST. Таким образом, клиент отправляет данные, отделенные от URL-адреса, поэтому вы не увидите их в URL-адресе адресное поле.
Форма будет очень похожа на предыдущую:
И чтобы использовать curl для публикации этой формы с теми же данными, что и раньше, мы мог бы сделать это так:
curl --data "год рождения = 1905 & press =% 20OK% 20" http://www.example.com/when.cgi
Этот вид POST будет использовать Content-Type application / x-www-form-urlencoded и является наиболее широко используемым типом POST.
Данные, которые вы отправляете на сервер, ДОЛЖНЫ быть уже правильно закодированы, curl будет не делай этого за тебя.Например, если вы хотите, чтобы данные содержали пробел, вам нужно заменить это пространство на% 20 и т. д. Несоблюдение этого скорее всего, приведет к неправильному получению ваших данных и их искажению.
Последние версии curl могут фактически кодировать POST-данные для вас, например:
curl --data-urlencode "name = Я Даниэль" http://www.example.com
Если вы повторите --data несколько раз в командной строке, curl будет объединить все заданные части данных - и поставить символ '&' между каждым сегмент данных.
4.4 Загрузка файла POST
Еще в конце 1995 года они определили дополнительный способ отправки данных через HTTP. Это задокументирован в RFC 1867, поэтому этот метод иногда называют RFC1867-публикация.
Этот метод в основном разработан для лучшей поддержки загрузки файлов. Форма, которая позволяет пользователю загружать файл, который можно записать в HTML так: