cURL — Википедия
Материал из Википедии — свободной энциклопедии
(перенаправлено с «Curl»)Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 7 июня 2018; проверки требуют 6 правок. Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 7 июня 2018; проверки требуют 6 правок. Не путать с языком программирования Curl.
cURL — (распространяемая по лицензии MIT)[8], кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Оригинальным автором является Дэниел Стенберг (Daniel Stenberg). Общее число разработчиков – 6.
С приходом обновления Redstone 4 «April 2018 Update» (версия 1803) для Windows 10, программа cURL была включена в состав этой операционной системы[9].
Программа cURL может автоматизировать передачу файлов или последовательность таких операций. Например, это хорошее средство для моделирования действий пользователя в веб-обозревателе.
Программа поддерживает протоколы: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP. Также cURL поддерживает сертификаты HTTPS, методы HTTP POST, HTTP PUT, загрузку на FTP, загрузку через формы HTTP.
Поддерживаемые методы аутентификации: базовая, дайджест, NTLM и Negotiate для HTTP, а также Kerberos для FTP.
Возможно возобновление передачи файла с места обрыва (при поддержке протоколом), туннелирование через HTTP-прокси, поддержка HTTP-Cookie.
cURL — это не офлайн-браузер типа HTTrack и не может целиком загрузить содержимое сайта
Libcurl — это библиотека API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl. libcurl используется, чтобы обеспечить возможность передачи файлов (адресуемых с помощью URL) многочисленным приложениям (как открытым, так и коммерческим).
Для libcurl имеются модули интеграции (bindings, привязки) для работы с более чем 30 языками программирования.
ru.wikipedia.org
Как пользоваться 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 на сервер из файла;
- -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 — выводить контент страницы в файл;
- -p — использовать прокси;
- —proto — указать протокол, который нужно использовать;
- -R — сохранять время последнего изменения удаленного файла;
- -s — выводить минимум информации об ошибках;
- -S — выводить сообщения об ошибках;
- -T — загрузить файл на сервер;
- -v — максимально подробный вывод;
- -y — минимальная скорость загрузки;
- -Y — максимальная скорость загрузки;
- -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 больше подходит для загрузки файлов и краулинга сайтов.
losst.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&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.
itproffi.ru
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» , подготовленной дружной командой проекта Интернет-технологии.ру
www.internet-technologies.ru
Утилита командной строки 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 • Форма
tokmakov.msk.ru
Инструменты командной строки для веб-разработчика / Habr
Жизнь веб-разработчика омрачена сложностями. Особенно неприятно, когда источник этих сложностей неизвестен. То ли это проблема с отправкой запроса, то ли с ответом, то ли со сторонней библиотекой, то ли внешний API глючит? Существует куча различных прилад, способных упростить нам жизнь. Вот некоторые инструменты командной строки, которые лично я считаю бесценными.cURL
cURL — программа для передачи данных по различным протоколам, похожая на wget. Основное отличие в том, что по умолчанию wget сохраняет в файл, а cURL выводит в командную строку. Так можно очень просто посмотреть контент веб-сайта. Например, вот как быстро получить свой текущий внешний IP:
$ curl ifconfig.me
93.96.141.93
Параметры -i (показывать заголовки) и -I (показывать только заголовки) делают cURL отличным инструментом для дебаггинга HTTP-ответов и анализа того, что конкретно сервер вам отправляет:
$ curl -I habrahabr.ru
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 18 Aug 2011 14:15:36 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Keep-alive: timeout=25
Параметр -L тоже полезный, он заставляет cURL автоматически следовать по редиректам. cURL поддерживает HTTP-аутентификацию, cookies, туннелирование через HTTP-прокси, ручные настройки в заголовках и многое, многое другое.
Siege
Siege — инструмент для нагрузочного тестирования. Плюс, у него есть удобная опция -g, которая очень похожа на curl –iL, но вдобавок показывает вам ещё и заголовки http-запроса. Вот пример с google.com (некоторые заголовки удалены для краткости):
$ siege -g www.google.com
GET / HTTP/1.1
Host: www.google.com
User-Agent: JoeDog/1.00 [en] (X11; I; Siege 2.70)
Connection: close
HTTP/1.1 302 Found
Location: http://www.google.co.uk/
Content-Type: text/html; charset=UTF-8
Server: gws
Content-Length: 221
Connection: close
GET / HTTP/1.1
Host: www.google.co.uk
User-Agent: JoeDog/1.00 [en] (X11; I; Siege 2.70)
Connection: close
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
X-XSS-Protection: 1; mode=block
Connection: close
Но для чего Siege действительно великолепно подходит, так это для нагрузочного тестирования. Как и апачевский бенчмарк ab, он может отправить множество параллельных запросов к сайту и посмотреть, как он справляется с трафиком. В следующем примере показано, как мы тестируем Google с помощью 20 запросов в течение 30 секунд, после чего выводится результат:
$ siege -c20 www.google.co.uk -b -t30s
...
Lifting the server siege... done.
Transactions: 1400 hits
Availability: 100.00 %
Elapsed time: 29.22 secs
Data transferred: 13.32 MB
Response time: 0.41 secs
Transaction rate: 47.91 trans/sec
Throughput: 0.46 MB/sec
Concurrency: 19.53
Successful transactions: 1400
Failed transactions: 0
Longest transaction: 4.08
Shortest transaction: 0.08
Одна из самых полезных функций Siege — то, что он может работать не только с одним адресом, но и со списком URL’ов из файла. Это отлично подходит для нагрузочного тестирования, потому что можно моделировать реальный трафик на сайте, а не просто жать один и тот же URL снова и снова. Например, вот как использовать Siege, чтобы нагрузить сервер, используя адреса из вашего лога Apache:
$ cut -d ' ' -f7 /var/log/apache2/access.log > urls.txt
$ siege -c<concurreny rate> -b -f urls.txt
Ngrep
Для серьёзного анализа трафика существует Wireshark с тысячами настроек, фильтров и конфигураций. Есть также версия для командной строки tshark. Но для простых задач функционал Wireshark я считаю избыточным. Так что до тех пор, пока мне не нужно мощное оружие, я использую ngrep. Он позволяет делать с сетевыми пакетами то же самое, что grep делает с файлами.
Для веб-трафика вы почти всегда захотите использовать параметр -W, чтобы сохранить форматирование строк, а также параметр -q, который скрывает избыточную информацию о неподходящих пакетах. Вот пример команды, которая перехватывает все пакеты с командой GET или POST:
ngrep -q -W byline "^(GET|POST) .*"
Вы можете добавить дополнительный фильтр для пакетов, например, по заданному хосту, IP-адресу или порту. Вот фильтр для всего входящего и исходящего трафика на google.com, порт 80, который содержит слово “search”.
ngrep -q -W byline "search" host www.google.com and port 80
habr.com
Curl (язык программирования) — Википедия
Не путать с библиотекой и служебной программой командной строки cURLCurl — рефлексивный объектно-ориентированный язык программирования, созданный для написания интерактивных веб-приложений. Он объединяет в себе возможности разметки текста (как у HTML), написание скриптов (как JavaScript), а также достаточно мощный вычислительный механизм (как у Java, C# и C++), причем все это внутри одного унифицированного фреймворка. Язык используется главным образом для решений внутрикорпоративных задач, B2B- и B2C-приложений.
Curl — язык разметки как HTML, то есть обычный текст показывается именно как текст; но в то же время, Curl включает в себя возможности объектно-ориентированного языка программирования, среди которых — поддержка множественного наследования. Curl-приложения не требуют соблюдения разделения информации, стиля и поведения, как это сделано для HTML, CSS и JavaScript, хотя этот стиль программирования вполне может быть использован в Curl в случае необходимости.
С одной стороны язык Curl может использоваться как замена HTML для представления форматированного текста, с другой стороны, его возможности не уступают возможностям компилируемых, строго типизированных объектно-ориентированных системных языков программирования.[1] Как «украшательства» (HTML-уровень), так и программные конструкции Curl могут быть расширены в пользовательском коде.
Язык проектировался так, чтобы Curl-приложения могли компилироваться в родной код клиентской машины за счет использования JIT-компиляции, и благодаря чему выполняться на достаточно высокой скорости.
Апплеты Curl можно просматривать при помощи Curl RTE — среды исполнения с дополнениями для веб-браузеров. На данный момент, поддерживаются платформы Microsoft Windows, Linux и Macintosh.
Curl обладает возможностью независимой работы апплетов в течение нескольких лет, то есть веб-апплет, исполняющийся на рабочем столе пользователя, не зависит от окна браузера, как это сделано в Silverlight 3 и Adobe AIR. Curl-апплеты также могут быть написаны таким способом, чтобы они выполнялись офлайн при отключении от сети (вычисления с редким подключением или occasionally-connected computing). Фактически, Curl IDE — это приложение, написанное на самом Curl.
Простой Curl-апплет «HelloWorld» может выглядеть так:
{Curl 5.0, 6.0, 7.0 applet}
{text
color = "blue",
font-size = 16pt,
Hello World}
Данный код выполнится, если пользователь имеет установленный Curl по крайней мере одной из версий 5.0, 6.0 или 7.0.
Curl обеспечивает поддержку и макросов, и обработку текста в дополнение к безымянным процедурам и методам именования.
Альтернативой использованию текстовой процедуры paragraph может являться:
{paragraph
paragraph-left-indent=0.5in,
{text color = "red", font-size = 12pt,
Hello}
{text color = "green", font-size = 12pt,
World}}
Не так давно этот стиль разметки был взят на вооружение ‘конструкторами’ (builders) в языке Groovy для JVM, что весьма удобно и для пользователей, привыкших к CSS или Tcl/Tk. Большинство возможностей RIA, созданных за счет комбинации библиотек JavaScript + HTML + CSS, уже давно реализовано в языке Curl, включая такие возможности, которые обычно ассоциируются с Prototype + Scriptaculous, как например, набор вкладок (accordion panes).
Curl выполняет обратные вызовы (callbacks) в том же стиле, что принят в Groovy:
{CommandButton width=100pt,
height = 50pt,
label = {center {bold Invokes an event handler when clicked}},
control-color = "orange",
|| Attach the following event handler to this CommandButton
{on Action do
{popup-message
title = "Ваше сообщение",
"Это сообщение диалога с пользователем."
}
}}
Для комментирования кода в Curl используется вертикальная черта в нескольких вариантах. Вот самый простой пример:
{text A comment can be on a line by itself,
|| Строчный комментарий на отдельной строке
or it can be at the end || Комментарий на той же строке, что и код
of a line.}
Штаб-квартира Curl, Inc. расположена в Кембридже, штат Массачусетс, и является дочерней компанией Sumisho Computer Systems Corp.. Наибольшее число из 400 коммерческих пользователей Curl находится в Японии и других азиатских странах, но Curl вполне доступен и на Западе.
Curl бесплатен для некоммерческого и ограниченно коммерческого использования (см. лицензирование). Существует также и профессиональная версия, поддерживающая дополнительные возможности промышленного класса.
ru.wikipedia.org