PHP CURL – функции и примеры использования. PHP CURL – функции и примеры использования Использование curl из командной строки

29.06.2020

c URL очень полезный инструмент командной строки для передачи данных от или к серверу. Curl поддерживает различные протоколы, такие как FILE, HTTP, HTTPS, IMAP, IMAPS, LDAP, DICT, LDAPS, TELNET, FTPS, GOPHER, RTMP, RTSP, SCP, SFTP, POP3, POP3S, SMB, SMBS, SMTP, SMTPS, и TFTP.

cURL может быть использован самыми различными и интересными способами. С помощью этого инструмента вы можете скачать, загрузить файлы и управлять ими, проверить свой адрес электронной почты, или даже обновлять свой статус на некоторых веб – сайтах социальных медиа или проверить погоду на улице. В этой статье мы рассмотрим пять наиболее полезных и основных видов использования инструмента cURL на любой .

1. Проверьте URL

Одним из наиболее распространенных и простейших применений cURL печатает саму команду, а затем URL, который вы хотите проверить

Curl https://domain.ru

Эта команда будет отображать содержимое URL на вашем терминале

2. Сохраните вывод URL в файл

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. Если вам понравился этот пост, пожалуйста поделитесь им с друзьями в социальных сетях с помощью кнопок ниже или просто оставьте комментарий. Благодарю.

CURL — инструмент командной строки для получения или отправки данных с использованием синтаксиса URL.

Если вы работаете в службе поддержки, то должны уметь использовать команды cURL для устранения неполадок веб-приложений. cURL — кроссплатформенная утилита для Windows, MAC и UNIX.
Ниже приведены некоторые часто используемые примеры синтаксиса.

1. Проверка возможности подключения к URL-адресу

Если вы работаете в UNIX-системе и пытаетесь подключиться к внешнему URL-адресу, то сначала проверьте наличие доступа к ресурсу через curl . Для этого используйте следующую команду:

# curl yoururl.com

2. Сохранение вывод URL / URI в файл

# curl yoururl.com > yoururl.html

Например:

# curl 74.125.68.100 >/tmp/google.html

Приведенный выше пример сохранит все содержимое с хоста 74.125.68.100 в файл /tmp/google.html .

3. Показать заголовок запроса и ответа

Если хотите удостовериться, что получаете ожидаемый заголовок запроса и ответа, используйте следующую команду:

# curl -v yoururl.com

например:

# 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

4. Загрузить с предельной скоростью

Если нужно узнать, сколько времени требуется для загрузки с определенной скоростью, то используйте следующую команду:

# curl –-limit-rate 2000B

например:

# curl –-limit-rate 2000B 74.125.68.100

5. Использование прокси для подключения

Если необходимо проверить, можно ли использовать прокси-сервер, примените следующий синтаксис:

# curl --proxyyourproxy:port http://yoururl.com

6. Проверка URL-адресас введением заголовка

Для устранения конкретной проблемы можно использовать Curl , чтобы вставить в header свои данные. Рассмотрим следующий пример запроса с Content-Type:

# curl --header "Content-Type: application/json" http://yoururl.com

Мы просим curl передать Content-Type в качестве application / json в заголовок запроса.

7. Добавить дополнительный заголовок

Вы можете добавить заголовок к запросу с помощью синтаксиса — header .

# curl –-header “X-CustomHeader: GeekFlare” http://yoururl.com

например:

# 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

8. Открыть только заголовок ответа

Если вы хотите быстро проверить заголовок ответа, то для этого можно использовать следующий синтаксис.

# curl --head http://yoururl.com

# 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 #

9. Подключить HTTPS / SSLURL-адрес и игнорировать любые ошибки SSL -сертификата

Если необходимо получить доступ к https URL-адресу, который выдает ошибку сертификата из-за несоответствия имени хоста, можно использовать следующий синтаксис.

curl --insecure https://yoururl.com

10. Подключиться с использованием определенного протокола (SSL / TLS)

Чтобы подключиться к URL- адресу только по протоколу SSL V2 / V3 или TLS ,используйте следующий синтаксис.

Для подключения с использованием SSLV2:

# curl --sslv2 https://yoururl.com

Для подключения с использованием SSLV3:

# curl --sslv3 https://yoururl.com

Для подключения через TLS:

# curl --tlsv1 https://yoururl.com

11. Загрузить файл с FTP-сервера

С помощью cURL можно загрузить файл с ftp-сервера , указав имя пользователя и пароль.

# curl -u user:password -O ftp://ftpurl/style.css

Всегда можно использовать «-v» с любым синтаксисом для вывода в подробном режиме.

Использования cURL онлайн

Да, это возможно. Вы можете выполнить 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 - это пакет программного обеспечения, состоящий из утилиты командной строки и библиотеки для передачи данных с использованием синтаксиса URL.

CURL поддерижвает множество протоколов, среди них DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet и TFTP.

Загрузить отдельный файл
Следующая команда получит содержимое URL и отобразит его в стандартном выводе (т. е. в вашем терминале).

Curl https://mi-al.ru/ > mi-al.htm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 14378 0 14378 0 0 5387 0 --:--:-- 0:00:02 --:--:-- 5387

Сохранение вывода cURL в файл
Мы можем сохранить результат команды curl в файл, используя опции -o/-O.
  • -o (o нижнего регистра) результат будет сохранён в файле, заданном в командной строке
  • -O (O верхнего регистра) имя файла будет взято из URL и будет использовано для сохранения полученных данных.

$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

Теперь будет сохранена страница gettext.html в файле с названием ‘mygettext.html’. Когда curl запущена с опцией -o, она отображает шкалу прогресса загрузки следующим образом.

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987

Когда вы используете curl -O (O верхнего регистра), она сама по себе сохранит содержимое в файл под названием ‘gettext.html’ на локальной машине.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html

Примечание: Когда curl должна писать данные в терминал, она отключает шкалу прогресса, чтобы не было путаницы в напечатанных данных. Мы можем исользовать ‘>’|’-o’|’-O’ опции для передачи результатов в файл.

Выборка нескольких файлов одновременно
Мы можем загрузить несколько файлов за один раз, задав все URL в командной строке.

Curl -O URL1 -O URL2

Команда ниже загрузит оба index.html и gettext.html и сохранит их с теми же именами в текущей директории.

Curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html

Пожалуйста, обратите внимание, когда мы загружаем несколько файлов с одного сервера как показано выше, curl попытается повторно использовать соединение.

Следуем за HTTP Location в заголовках с опцией -L
По умолчанию, CURL не следует за HTTP Location в заголовках (редиректы). Когда запрошенная веб-страница перемещена в другое место, то соответствующий ответ будет передан в заголовках HTTP Location.
Например, когда кто-то печатает google.com в строке браузера из своей страны, они автоматически будут перенаправлены на ‘google.co.xx’. Это делается на основе заголовка HTTP Location как показано ниже.

Curl https://www.google.com/?gws_rd=ssl

302 Moved

302 Moved

The document has moved here.

Приведённый выше вывод говорит, что запрашиваемый документ был перемещён в ‘

Скрыто от гостей

.
Вы можете указать curl следовать редиректам, это делается с использованием опции -L как показано ниже. Теперь будет загружен исходный код html с

Скрыто от гостей

.

Curl -L https://www.google.com/?gws_rd=ssl

Вообновление предыдущей закачки

Используя опцию -C вы можете продолжить закачку, которая была остановлена по каким-либо причинам. Это будет полезным при обрыве загрузки больших файлов.
Если мы говорим ‘-C -’, то curl будет искать, с какого места возобновить загрузку. Мы также можем задать ‘-C <смещение>’. Заданное смещение байт будет пропущено от начала исходного файла.
Начните большую загрузку с curl и нажмите Ctrl-C для остановки посреди закачки.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%

Закачка была остановлена на 20.1%. Используя “curl -C -” мы можем продолжить загрузку с того места, где мы остановились. Теперь загрузка продолжиться с 20.1%.

Curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%

Ограничение скорости передачи данных
Вы можете ограничить величину скорости передачи данных опцией –limit-rate. Вы можете передать максимальную скорость в качестве аргумента.

$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

Команда выше ограничит скорость передачи на 1000 байт/секунду. curl может использовать скорость выше на пиках. Но средняя скорость будет примерно 1000 байт/секунду.
Ниже показан индикатор прогресса для представленной выше команды. Вы можете видеть, что текущая скорость в районе 1000 байт.

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999

Загрузить файл только если он изменён до/после заданного времени
Вы можете получить файлы, которые были изменены после определённого времени, используя опцию -z в curl. Это будет работать и для FTP и для HTTP.

Команда выше загрузит yy.html только если он изменялся позднее чем заданная дата и время.

Команда выше загрузит файл file.html, если он изменялся до заданной даты и времени. Наберите ‘man curl_getdate’ чтобы узнать больше о различных поддерживаемых синтаксисах для выражений даты.

Прохождение аутентификации HTTP в cURL
Иногда веб-сайты требуют имя пользователя и пароль для просмотра их содержимого. С помощью опции -u вы можете передать эти учётные данные из cURL на веб-сервер как показано ниже.

$ curl -u username:password URL

Примечание: По умолчанию curl использует базовую HTTP аутентификацию. Мы можем задать иные методы аутентификации используя –ntlm | –digest.


cURL может также использоваться для загрузки файлов с FTP серверов. Если заданный FTP путь является директорией, то по умолчанию будет выведен список файлов в ней.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

Команда выше загрузит файл xss.php с ftp-сервера и сохранит его в локальной директории.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

Здесь URL отсылает к директории. Следовательно, cURL сделает список файлов и директорий по заданному URL адресу.


CURL поддерживает диапазоны заданные в URL. Когда дан диапазон, будут загружены соответствующие файлы внутри этого диапазона. Это будет полезным при загрузке пакетов с сайтов FTP зеркал.

$ curl ftp://ftp.uk.debian.org/debian/pool/main//

Команда выше сделает список всех пакетов в диапазоне a-z в терминале.

Выгрузка файлов на FTP-сервер
Curl также может использоваться для выгрузки на FTP-сервер с опцией -T.

$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

Команда выше выгрузит файл с именем myfile.txt на FTP-сервер. Вы можете также выгрузить несколько файлов за один раз используя диапазоны.

$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com

Опционально мы можем использовать “.” для получения из стандартного ввода и передачи его на удалённую машину.

$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

Команда выше получит вывод от пользователя из стандартного ввода и сохранит содержимое на ftp-сервере под именем ‘myfile_1.txt’.
Вы можете задать ‘-T’ для каждого URL, и каждая пара адрес-файл будут определять что куда выгружать

Больше информации с увеличением вербальности и опцией трассировки
Вы можете узнать что происходит, используя опцию -v. Опция -v включает вербальный режим и будет печатать подробности.

Curl -v https://www.google.co.th/?gws_rd=ssl

Команда выше выведет следующее

* Rebuilt URL to: https://www.google.co.th/?gws_rd=ssl * Hostname was NOT found in DNS cache * Trying 27.123.17.49... * Connected to www.google.co.th (27.123.17.49) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.38.0 > Host: www.google.co.th > Accept: */* > < HTTP/1.1 200 OK < Date: Fri, 14 Aug 2015 23:07:20 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=windows-874 < P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info." * Server gws is not blacklisted < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1439593640:LM=1439593640:V=1:S=FfuoPPpKbyzTdJ6T; expires=Sun, 13-Aug-2017 23:07:20 GMT; path=/; domain=.google.co.th ... ... ...

Если вам нужно больше детальной информации, тогда вы можете использовать опцию –trace. Опция –trace включит полный дамп трассировки всех входящих/исходящих данных для заданного файла

CURL - это пакет программного обеспечения, состоящий из утилиты командной строки и библиотеки для передачи данных с использованием синтаксиса URL.

CURL поддерижвает множество протоколов, среди них DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet и TFTP.

Загрузить отдельный файл
Следующая команда получит содержимое URL и отобразит его в стандартном выводе (т. е. в вашем терминале).

Curl https://mi-al.ru/ > mi-al.htm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 14378 0 14378 0 0 5387 0 --:--:-- 0:00:02 --:--:-- 5387

Сохранение вывода cURL в файл
Мы можем сохранить результат команды curl в файл, используя опции -o/-O.
  • -o (o нижнего регистра) результат будет сохранён в файле, заданном в командной строке
  • -O (O верхнего регистра) имя файла будет взято из URL и будет использовано для сохранения полученных данных.

$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

Теперь будет сохранена страница gettext.html в файле с названием ‘mygettext.html’. Когда curl запущена с опцией -o, она отображает шкалу прогресса загрузки следующим образом.

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987

Когда вы используете curl -O (O верхнего регистра), она сама по себе сохранит содержимое в файл под названием ‘gettext.html’ на локальной машине.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html

Примечание: Когда curl должна писать данные в терминал, она отключает шкалу прогресса, чтобы не было путаницы в напечатанных данных. Мы можем исользовать ‘>’|’-o’|’-O’ опции для передачи результатов в файл.

Выборка нескольких файлов одновременно
Мы можем загрузить несколько файлов за один раз, задав все URL в командной строке.

Curl -O URL1 -O URL2

Команда ниже загрузит оба index.html и gettext.html и сохранит их с теми же именами в текущей директории.

Curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html

Пожалуйста, обратите внимание, когда мы загружаем несколько файлов с одного сервера как показано выше, curl попытается повторно использовать соединение.

Следуем за HTTP Location в заголовках с опцией -L
По умолчанию, CURL не следует за HTTP Location в заголовках (редиректы). Когда запрошенная веб-страница перемещена в другое место, то соответствующий ответ будет передан в заголовках HTTP Location.
Например, когда кто-то печатает google.com в строке браузера из своей страны, они автоматически будут перенаправлены на ‘google.co.xx’. Это делается на основе заголовка HTTP Location как показано ниже.

Curl https://www.google.com/?gws_rd=ssl

302 Moved

302 Moved

The document has moved here.

Приведённый выше вывод говорит, что запрашиваемый документ был перемещён в ‘

Скрыто от гостей

.
Вы можете указать curl следовать редиректам, это делается с использованием опции -L как показано ниже. Теперь будет загружен исходный код html с

Скрыто от гостей

.

Curl -L https://www.google.com/?gws_rd=ssl

Вообновление предыдущей закачки

Используя опцию -C вы можете продолжить закачку, которая была остановлена по каким-либо причинам. Это будет полезным при обрыве загрузки больших файлов.
Если мы говорим ‘-C -’, то curl будет искать, с какого места возобновить загрузку. Мы также можем задать ‘-C <смещение>’. Заданное смещение байт будет пропущено от начала исходного файла.
Начните большую загрузку с curl и нажмите Ctrl-C для остановки посреди закачки.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%

Закачка была остановлена на 20.1%. Используя “curl -C -” мы можем продолжить загрузку с того места, где мы остановились. Теперь загрузка продолжиться с 20.1%.

Curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%

Ограничение скорости передачи данных
Вы можете ограничить величину скорости передачи данных опцией –limit-rate. Вы можете передать максимальную скорость в качестве аргумента.

$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

Команда выше ограничит скорость передачи на 1000 байт/секунду. curl может использовать скорость выше на пиках. Но средняя скорость будет примерно 1000 байт/секунду.
Ниже показан индикатор прогресса для представленной выше команды. Вы можете видеть, что текущая скорость в районе 1000 байт.

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999

Загрузить файл только если он изменён до/после заданного времени
Вы можете получить файлы, которые были изменены после определённого времени, используя опцию -z в curl. Это будет работать и для FTP и для HTTP.

Команда выше загрузит yy.html только если он изменялся позднее чем заданная дата и время.

Команда выше загрузит файл file.html, если он изменялся до заданной даты и времени. Наберите ‘man curl_getdate’ чтобы узнать больше о различных поддерживаемых синтаксисах для выражений даты.

Прохождение аутентификации HTTP в cURL
Иногда веб-сайты требуют имя пользователя и пароль для просмотра их содержимого. С помощью опции -u вы можете передать эти учётные данные из cURL на веб-сервер как показано ниже.

$ curl -u username:password URL

Примечание: По умолчанию curl использует базовую HTTP аутентификацию. Мы можем задать иные методы аутентификации используя –ntlm | –digest.


cURL может также использоваться для загрузки файлов с FTP серверов. Если заданный FTP путь является директорией, то по умолчанию будет выведен список файлов в ней.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

Команда выше загрузит файл xss.php с ftp-сервера и сохранит его в локальной директории.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

Здесь URL отсылает к директории. Следовательно, cURL сделает список файлов и директорий по заданному URL адресу.


CURL поддерживает диапазоны заданные в URL. Когда дан диапазон, будут загружены соответствующие файлы внутри этого диапазона. Это будет полезным при загрузке пакетов с сайтов FTP зеркал.

$ curl ftp://ftp.uk.debian.org/debian/pool/main//

Команда выше сделает список всех пакетов в диапазоне a-z в терминале.

Выгрузка файлов на FTP-сервер
Curl также может использоваться для выгрузки на FTP-сервер с опцией -T.

$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

Команда выше выгрузит файл с именем myfile.txt на FTP-сервер. Вы можете также выгрузить несколько файлов за один раз используя диапазоны.

$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com

Опционально мы можем использовать “.” для получения из стандартного ввода и передачи его на удалённую машину.

$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

Команда выше получит вывод от пользователя из стандартного ввода и сохранит содержимое на ftp-сервере под именем ‘myfile_1.txt’.
Вы можете задать ‘-T’ для каждого URL, и каждая пара адрес-файл будут определять что куда выгружать

Больше информации с увеличением вербальности и опцией трассировки
Вы можете узнать что происходит, используя опцию -v. Опция -v включает вербальный режим и будет печатать подробности.

Curl -v https://www.google.co.th/?gws_rd=ssl

Команда выше выведет следующее

* Rebuilt URL to: https://www.google.co.th/?gws_rd=ssl * Hostname was NOT found in DNS cache * Trying 27.123.17.49... * Connected to www.google.co.th (27.123.17.49) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.38.0 > Host: www.google.co.th > Accept: */* > < HTTP/1.1 200 OK < Date: Fri, 14 Aug 2015 23:07:20 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=windows-874 < P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info." * Server gws is not blacklisted < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1439593640:LM=1439593640:V=1:S=FfuoPPpKbyzTdJ6T; expires=Sun, 13-Aug-2017 23:07:20 GMT; path=/; domain=.google.co.th ... ... ...

Если вам нужно больше детальной информации, тогда вы можете использовать опцию –trace. Опция –trace включит полный дамп трассировки всех входящих/исходящих данных для заданного файла

Нам часто приходится загружать различные файлы из интернета, например, исполняемые файлы программ, файлы скриптов, архивы с исходниками. Но не всегда это нужно делать через браузер. Во многих ситуациях гораздо проще выполнить все действия через терминал. Поскольку таким образом вы можете автоматизировать процесс. С другой стороны, веб-мастерам время от времени приходится тестировать доступность веб-сайтов, проверять отправляемые и получаемые заголовки и многое другое.

Для решения таких задач и задач подобного круга можно воспользоваться утилитой 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 - выводить контент страницы в файл;
  • -O - сохранять контент в файл с именем страницы или файла на сервере;
  • -p - использовать прокси;
  • --proto - указать протокол, который нужно использовать;
  • -R - сохранять время последнего изменения удаленного файла;
  • -s - выводить минимум информации об ошибках;
  • -S - выводить сообщения об ошибках;
  • -T - загрузить файл на сервер;
  • -v - максимально подробный вывод;
  • -y - минимальная скорость загрузки;
  • -Y - максимальная скорость загрузки;
  • -z - скачать файл, только если он был модифицирован позже указанного времени;
  • -V - вывести версию.

Это далеко не все параметры curl linux, но здесь перечислено все основное, что вам придется использовать.

Как пользоваться curl?

Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.

Самая частая задача - это . Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или 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

Ограничение скорости

Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -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

Передача файлов

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://сайт

А опция -H позволяет или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:

Аутентификация 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, зачем нужна эта утилита и основные ее возможности. Несмотря на свою схожесть с , они очень сильно отличаются. Команда curl linux предназначена больше для анализа и имитации различных действий на сервере, тогда как wget больше подходит для загрузки файлов и краулинга сайтов.