10 команд curl, которые вам следует знать — Разработка на vc.ru
Команда Mail.ru Cloud Solutions перевела статью, автор которой составил краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS. Это не замена официального руководства по cURL, скорее, краткий конспект.
{«id»:155069,»url»:»https:\/\/vc.ru\/dev\/155069-10-komand-curl-kotorye-vam-sleduet-znat»,»title»:»10 \u043a\u043e\u043c\u0430\u043d\u0434 curl, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u043d\u0430\u0442\u044c»,»services»:{«facebook»:{«url»:»https:\/\/www.facebook.com\/sharer\/sharer.php?u=https:\/\/vc.ru\/dev\/155069-10-komand-curl-kotorye-vam-sleduet-znat»,»short_name»:»FB»,»title»:»Facebook»,»width»:600,»height»:450},»vkontakte»:{«url»:»https:\/\/vk. com\/share.php?url=https:\/\/vc.ru\/dev\/155069-10-komand-curl-kotorye-vam-sleduet-znat&title=10 \u043a\u043e\u043c\u0430\u043d\u0434 curl, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u043d\u0430\u0442\u044c»,»short_name»:»VK»,»title»:»\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435″,»width»:600,»height»:450},»twitter»:{«url»:»https:\/\/twitter.com\/intent\/tweet?url=https:\/\/vc.ru\/dev\/155069-10-komand-curl-kotorye-vam-sleduet-znat&text=10 \u043a\u043e\u043c\u0430\u043d\u0434 curl, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u043d\u0430\u0442\u044c»,»short_name»:»TW»,»title»:»Twitter»,»width»:600,»height»:450},»telegram»:{«url»:»tg:\/\/msg_url?url=https:\/\/vc.ru\/dev\/155069-10-komand-curl-kotorye-vam-sleduet-znat&text=10 \u043a\u043e\u043c\u0430\u043d\u0434 curl, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u043d\u0430\u0442\u044c»,»short_name»:»TG»,»title»:»Telegram»,»width»:600,»height»:450},»odnoklassniki»:{«url»:»http:\/\/connect. ok.ru\/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl=https:\/\/vc.ru\/dev\/155069-10-komand-curl-kotorye-vam-sleduet-znat»,»short_name»:»OK»,»title»:»\u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0438″,»width»:600,»height»:450},»email»:{«url»:»mailto:?subject=10 \u043a\u043e\u043c\u0430\u043d\u0434 curl, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u043d\u0430\u0442\u044c&body=https:\/\/vc.ru\/dev\/155069-10-komand-curl-kotorye-vam-sleduet-znat»,»short_name»:»Email»,»title»:»\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u043e\u0447\u0442\u0443″,»width»:600,»height»:450}},»isFavorited»:false}
11 760
просмотров
cURL (расшифровывается как Client URL) — программное обеспечение, которое предоставляет библиотеку libcurl и инструмент командной строки curl. Возможности cURL огромны, во многих опциях легко потеряться.
curl — инструмент для передачи данных с сервера или на него, при этом используется один из поддерживаемых протоколов: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Команда предназначена для работы без взаимодействия с пользователем.
Команда curl запускается из командной строки и предустановлена в большинстве дистрибутивов Linux.
Варианты применения:
- доступ без браузера;
- внутри shell-скриптов;
- для тестирования API.
В основном я использовал curl для тестирования API, иногда просто вставляя команды, которые нашел в интернете. Но я хочу разобраться в curl и лучше понять его особенности. Так что поделюсь некоторыми командами, с которыми столкнулся во время работы.
Запрос страницы
Если никакие аргументы не указаны, то команда curl выполняет HTTP-запрос get и отображает статическое содержимое страницы. Оно аналогично тому, что мы видим при просмотре исходного кода в браузере.
Скачивание файла
Есть два варианта этой команды.
- Скачать файл и сохранить под оригинальным именем (testfile.tar.gz).
curl -O https://testdomain.com/testfile.tar.gz
- Скачать файл и сохранить под другим именем.
curl -o custom_file.tar.gz https://testdomain.com/testfile.tar.gz
Еще можно скачать несколько файлов одной командой, хотя в мануале так делать не рекомендуют.
curl -O https://testdomain.com/testfile.tar.gz -O https://testdomain.com/testfile2.tar.gz
Получение заголовков HTTP
Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции -I или -head. Они позволяют получить заголовок без тела документа.
curl -I https://www.google.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
P3P: CP=»This is not a P3P policy! See g.co/p3phelp for more info.»
Date: Thu, 04 Jun 2020 15:07:42 GMT
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Expires: Thu, 04 Jun 2020 15:07:42 GMT
Cache-Control: private
Set-Cookie: 1P_JAR=2020-06-04-15; expires=Sat, 04-Jul-2020 15:07:42 GMT; path=/; domain=.google.com; Secure
Set-Cookie: <cookie_info>
Игнорирование ошибки неправильных или самоподписанных сертификатов
Когда вы тестируете веб-приложение или API, то в вашем тестовом окружении могут быть самоподписанные или неправильные SSL-сертификаты. По умолчанию curl верифицирует все сертификаты. Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию -k или -insecure.
curl -k https://localhost/my_test_endpoint
Отправка POST-запроса
Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON.
- Запрос в виде списка имя=значение.
curl —data «param1=test1¶m2=test2» http://test. com
- Запрос в виде JSON.
curl -H ‘Content-Type: application/json’ —data ‘{«param1″:»test1″,»param2″:»test2»}’ http://www.test.com
Параметр —data эквивалентен -d, оба указывают curl выполнить HTTP POST-запрос.
Указание типа запроса
Если curl не передаются никакие данные, то по умолчанию он выполняет HTTP GET запрос. Но если вам, например, нужно обновить данные, а не пересоздать их заново, то curl поддерживает опции, указывающие тип запроса. Параметры -x или —request позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.
# updating the value of param2 to be test 3 on the record id
curl -X ‘PUT’ -d ‘{«param1″:»test1″,»param2″:»test3»}’ \http://test.com/1
Использование авторизации
API защищено авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр -u или —user. Если просто передать логин, то curl запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.
curl -u <user:password> https://my-test-api.com/endpoint1
Управление резольвом имен
Вы хотите протестировать API перед развертыванием и перенаправить запрос на тестовую машину — это можно сделать, указав альтернативный резольв имени эндпоинта для данного запроса. Все работает эквивалентно пропиcыванию хоста в /etc/hosts.
curl —resolve www.test.com:80:localhost http://www.test.com/
Загрузка файла
О возможности загрузки файла через curl я узнал недавно. Не был уверен, что это возможно, но, по всей видимости, это так: curl с опцией -F эмулирует отправку заполненной формы, когда пользователь нажимает кнопку отправки. Опция указывает curl передавать данные в виде POST-запроса, используя multipart / form-data Content-Type.
curl -F @field_name=@path/to/local_file
Вы можете загрузить несколько файлов, повторяя параметр -F.
curl -F @field_name=@path/to/local_file
@field_name=@path/to/local_file_2
Измерение продолжительности соединения
Вы можете использовать опцию -w для отображения информации в stdout после завершения передачи. Она поддерживает отображение набора переменных. Например, можно узнать общее время, которое потребовалось для успешного выполнения запроса. Это удобно, если вам нужно определить время загрузки или скачивания с помощью curl.
curl -w «%{time_total}\n» -o /dev/null -s www.test.com
Это некоторые из опций, которые можно использовать с curl. Надеюсь, информация была вам полезна и статья понравилась.
Что еще почитать:
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» , подготовленная редакцией проекта.
linux curl с поддержкой КРИПТОПРО · GitHub
Ремарка: все тесты были на Ubuntu Server 14.04, так же все это справедливо для версии openssl >= 1.0.0. Не советую использовать эту сборку curl для всего что угодно, так как она может быть сильно хуже по возможностям стандартной, так как я компилировал утилиту всего с 1 флагом, и соответственно мог упустить уйму важных ее возможностей. Советую использовать ее как доп утилиту в папке проекта или где попало, не советую в продакшен использовать везде где попало, ну или если с головой подходить к флагам компиляции и сделать это хорошо и по настоящему, у меня такой цели не стоит, делаю на скорую руку, просто как рабочее решение.
Устанавливаем openssl
apt-get install -y openssl
Настраиваем в linux curl программе (не путать с библиотеками языков типа php_curl. so, там уже сами, но принцип тот же) поддержку криптографических движков:
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
Для этого в файле /usr/lib/ssl/openssl.cnf в глобальном пространстве (то есть до первой секции — «[..]») добавляем строчки
GOST
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
GOST
```
Проверяем что у нас появилась поддержка ГОСТ движков в openssl.
root@b2d31954e0e6:# openssl ciphers|tr ‘:’ ‘\n’ | grep GOS
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
root@b2d31954e0e6:#
Качаем последнюю версию curl по ссылке https://curl.haxx.se/download.html, в моем случае это было https://curl. haxx.se/download/curl-7.49.1.tar.gz
Качаем куда удобно и распаковываем, я работал в ~
cd ~
curl https://curl.haxx.se/download/curl-7.49.1.tar.gz > curl-7.49.1.tar.gz
tar -xzf curl-7.49.1.tar.gz
«`
Устанавливаем libssl-dev и утилиту make
apt-get install libssl-dev make
Пересобираем и компилируем curl с поддержкой локальной версии openssl.
cd curl-7.49.1/
./configure —with-ssl
make
В результате у нас должна появиться скомпилированая утилита в папке src. Проверяем что все ок. Если при компиляции утилиты произошли ошибки, то прелагаю вам их решить самостоятельно, все есть в гугле.
root@b2d31954e0e6:~/curl-7.49.1# src/curl -V
curl 7.49.1 (x86_64-pc-linux-gnu) libcurl/7.49.1 OpenSSL/1.0.1f zlib/1.2.8
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
«`
Используем готовую утилиту по своему усмотрению 🙂
src/curl https://example. com/ —cacert /cacer-2015.pem
Для конвертации файлакорневого сертификата КРИПТОПРО из формата p7b в нормальный формат PEM подходит вот такая команда
openssl pkcs7 -inform DER -outform PEM -print_certs -in cert.p7b -out cert.pem
Полезные ссылки:
https://www.altlinux.org/%D0%93%D0%9E%D0%A1%D0%A2_%D0%B2_OpenSSL
CURLOPT_ABSTRACT_UNIX_SOCKET | Позволяет использовать абстрактный доменный сокет Unix вместо установления TCP-соединения с хостом и устанавливает путь к указанной строке (string). Эта опция использует ту же семантику, что и CURLOPT_UNIX_SOCKET_PATH . Эти два параметрасовместно используют одно и то же хранилище, поэтому для каждого дескриптора можно установить только один из них. | Доступно с PHP 7. 3.0 и cURL 7.53.0 |
CURLOPT_CAINFO | Имя файла, содержащего один или более сертификатов, с которыми будут сверяться узлы. Этот параметр имеет смысл только при использовании совместно с CURLOPT_SSL_VERIFYPEER . | Может потребоваться абсолютный путь. |
CURLOPT_CAPATH | Директория, содержащая несколько CA сертификатов. Используйте этот параметр совместно с CURLOPT_SSL_VERIFYPEER . | |
CURLOPT_COOKIE | Содержимое заголовка "Cookie: " ,используемого в HTTP-запросе. Обратите внимание, что несколько cookies разделяются точкой с запятой с последующим пробелом (например, « fruit=apple; colour=red «) | |
CURLOPT_COOKIEFILE | Имя файла, содержащего cookies. Данный файл должен быть в формате Netscape или просто заголовками HTTP, записанными в файл. Если в качестве имени файла передана пустая строка, то cookies сохраняться не будут, но их обработка всё ещё будет включена. | |
CURLOPT_COOKIEJAR | Имя файла, в котором будут сохранены все внутренние cookies текущей передачи после закрытия дескриптора, например, после вызова curl_close. | |
CURLOPT_COOKIELIST | Строка cookie (т.е. одна строка в формате Netscape/Mozilla или обычный заголовок Set-Cookie в стиле HTTP) добавляет этот единственный cookie во внутреннее хранилище cookie. "ALL" удаляет все файлы cookie, хранящиеся в памяти."SESS" удаляет все файлы cookie сессии, хранящиеся в памяти."FLUSH" записывает все известные файлы cookie в файл, указанный в CURLOPT_COOKIEJAR ."RELOAD" загружает все файлы cookie из файлов, указанных в CURLOPT_COOKIEFILE . | Доступно с PHP 5.5.0 и cURL 7.14.1. |
CURLOPT_CUSTOMREQUEST | Собственный метод запроса, используемый вместо
| |
CURLOPT_DEFAULT_PROTOCOL | Протокол по умолчанию, если он отсутствует в схеме URL. | Добавлено в cURL 7.45.0. Доступно с PHP 7.0.7. |
CURLOPT_DNS_INTERFACE | Устанавливает имя сетевого интерфейса, к которому привязан DNS. | Добавлено в cURL 7.33.0. Доступно с PHP 7. 0.7. |
CURLOPT_DNS_LOCAL_IP4 | Установить локальный IPv4-адрес, по которому доступне DNS. | Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7. |
CURLOPT_DNS_LOCAL_IP6 | Установить локальный IPv6-адрес, по которому доступне DNS. | Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7. |
CURLOPT_EGDSOCKET | Наподобие CURLOPT_RANDOM_FILE , за исключениемтого, что имя файла устанавливается в сокет Entropy Gathering Daemon. | |
CURLOPT_ENCODING | Содержимое заголовка "Accept-Encoding: " .Это позволяет декодировать запрос. Поддерживаемыми кодировками являются "identity" ,"deflate" и "gzip" .Если передана пустая строка, "" ,посылается заголовок, содержащий все поддерживаемые типы кодировок. | Добавлен в версии cURL 7.10. |
CURLOPT_FTPPORT | Значение, которое будет использоваться для определения IP-адреса для команды «PORT» FTP-протокола. Команда «PORT» сообщает серверу, с каким IP-адресом он должен устанавливать соединение. Это может быть IP-адрес, имя хоста, имя сетевого интерфейса (под Unix) или просто ‘-‘ для использования системного IP-адреса по умолчанию. | |
CURLOPT_INTERFACE | Имя используемого сетевого интерфейса. Может быть именем интерфейса, IP адресом или именем хоста. | |
CURLOPT_KEYPASSWD | Пароль, который требуется для использования закрытого ключа CURLOPT_SSLKEY или CURLOPT_SSH_PRIVATE_KEYFILE . | Добавлено в cURL 7.16.1. |
CURLOPT_KRB4LEVEL | Уровень безопасности KRB4 (Kerberos 4). Любое из следующих значений (в порядке от слабого к самому сильному) корректно: "clear" ,"safe" ,"confidential" ,"private". .Если указанная строка отличается от данных значений, будет использовано значение "private" .Установка этого параметра в null полностью отключитбезопасность KRB4. На данный момент безопасность KRB4 работает только с FTP-транзакциями. | |
CURLOPT_LOGIN_OPTIONS | Используется для установки специфичных для протокола настроек логина, таких как предпочитаемый механизм аутентификации «AUTH=NTLM» или «AUTH=*», и должна использоваться совместно с CURLOPT_USERNAME . | Добавлено в cURL 7.34.0. Доступно с PHP 7.0.7. |
CURLOPT_PINNEDPUBLICKEY | Устанавливает зафиксированный открытый ключ. Строка должны содержать имя файла, в котором лежит ваш зафиксированный открытый ключ. Ожидается формат файла «PEM» или «DEX». Строка также может быть числом в формате base64, закодированным sha256 с префиксом «sha256//» и разделённая точкой с запятой «;». | Добавлено в cURL 7.39.0. Доступно с PHP 7.0.7. |
CURLOPT_POSTFIELDS | Все данные, передаваемые в HTTP POST-запросе. Файлы можно отправлять с использованием CURLFile, | |
CURLOPT_PRIVATE | Любые данные, которые должны связаны с этим дескриптором cURL. Эти данные могут быть выбраны подзапросом опции CURLINFO_PRIVATE функцииcurl_getinfo(). cURL ничего не делает с этими данными. Если используется множество дескрипторов cURL, эти данные обычно используются как уникальный ключ для определения дескриптора cURL. | Добавлено в cURL 7.10.3. |
CURLOPT_PRE_PROXY | Задайте строку (string), содержащую имя хоста или IP-адрес, который будет использоваться в качестве прокси-сервера, к которому подключается curl, прежде чем он подключится к прокси-серверу HTTP(S), указанному в опции CURLOPT_PROXY для предстоящего запроса.Предварительный прокси-сервер может быть только SOCKS-прокси, и перед ним должен стоять префикс [scheme]:// , чтобы указать, какой тип socks используется.Числовой адрес IPv6 должен быть написан в [скобках]. Установка препрокси в пустую строку явно отключает использование препрокси. Чтобы указать номер порта в этой строке, добавьте :[port] в конец имени хоста. Номер порта прокси-сервера может быть дополнительно указан с помощью отдельной опции CURLOPT_PROXYPORT .По умолчанию используется порт 1080 для прокси, если порт не указан. | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY | HTTP-прокси, через который будут направляться запросы. | |
CURLOPT_PROXY_SERVICE_NAME | Имя сервиса аутентификации прокси. | Добавлено в cURL 7.34.0. Доступно с PHP 7.0.7. |
CURLOPT_PROXY_CAINFO | Путь к прокси-серверу центра сертификации. Задайте путь в виде строки (string) с именем файла, содержащего один или несколько сертификатов для проверки прокси с помощью HTTPS. Этот параметр предназначен для подключения к прокси-серверу HTTPS, а не к серверу HTTPS. По умолчанию задан системный путь, где предполагается хранить пакет cacert libcurl. | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_CAPATH | Каталог, содержащий несколько сертификатов центра сертификации для проверки прокси HTTPS. | Доступно с PHP 7.3.0 и libcurl >= cURL 7. 52.0. |
CURLOPT_PROXY_CRLFILE | Задайте имя файла с помощью конкатенации CRL (списка отзыва сертификатов) в формате PEM для использования при проверке сертификата, которая происходит во время обмена SSL. | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_KEYPASSWD | Установите строку, используемую в качестве пароля, необходимого для использования закрытого ключа CURLOPT_PROXY_SSLKEY . Вам не нуженпароль для загрузки сертификата, но вам нужен пароль для загрузки вашего закрытого ключа. Этот параметр предназначен для подключения к прокси-серверу HTTPS, а не к серверу HTTPS. | Доступно с PHP 7.3.0 и libcurl >= cURL 7. 52.0. |
CURLOPT_PROXY_PINNEDPUBLICKEY | Установите закреплённый открытый ключ для HTTPS-прокси. Строка может быть именем файла вашего закреплённого открытого ключа. Ожидаемый формат файла: «PEM» или «DER». Строка также может быть любым количеством закодированных в base64 хешей sha256, которым предшествует «sha256//» и разделяются «;» | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_SSLCERT | Имя файла вашего клиентского сертификата, используемого для подключения к прокси HTTPS. Формат по умолчанию — «P12» в Secure Transport и «PEM» в других движках; его можно изменить с помощью CURLOPT_PROXY_SSLCERTTYPE .С NSS или Secure Transport это также может быть псевдоним сертификата, с которым вы хотите пройти аутентификацию, так как он назван в базе данных безопасности. Если вы хотите использовать файл из текущего каталога, пожалуйста, добавьте к нему префикс «./», чтобы избежать путаницы с псевдонимом. | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_SSLCERTTYPE | Формат сертификата вашего клиента, используемый при подключении к HTTPS-прокси. Поддерживаемые форматы: «PEM» и «DER», за исключением Secure Transport. OpenSSL (версии 0.9.3 и новее) и Secure Transport (в iOS 5 или новее или OS X 10.7 или новее) также поддерживают «P12» для файлов в кодировке PKCS#12. По умолчанию «PEM». | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_SSL_CIPHER_LIST | Список шифров, используемых для подключения к прокси HTTPS. Список должен быть синтаксически правильным, он состоит из одной или нескольких строк шифров, разделённых двоеточиями. Запятые или пробелы также являются допустимыми разделителями, но обычно качестве операторов используются двоеточия, !, — и +. | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_TLS13_CIPHERS | Список наборов шифров, которые будут использоваться для подключения TLS 1.3 к прокси. Список должен быть синтаксически правильным, он состоит из одной или нескольких строк набора шифров, разделённых двоеточиями. Эта опция в настоящее время используется только тогда, когда curl собран для использования OpenSSL 1.1.1 или новее. Если вы используете другой бэкенд SSL, вы можете попытаться установить наборы шифров TLS 1.3, используя параметр CURLOPT_PROXY_SSL_CIPHER_LIST . | Доступно с PHP 7.3.0 и libcurl >= cURL 7.61.0. Доступно при сборке с OpenSSL >= 1.1.1. |
CURLOPT_PROXY_SSLKEY | Имя файла вашего личного ключа, используемого для подключения к прокси HTTPS. Формат по умолчанию — «PEM», и его можно изменить с помощью CURLOPT_PROXY_SSLKEYTYPE .(Только для iOS и Mac OS X). Этот параметр игнорируется, если curl был создан для Secure Transport. | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. Доступно, если включён встроенный TLS. |
CURLOPT_PROXY_SSLKEYTYPE | Формат вашего закрытого ключа. Поддерживаемые форматы: «PEM», «DER» и «ENG». | Доступно с PHP 7. 3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_TLSAUTH_PASSWORD | Пароль, используемый для метода аутентификации TLS, указанного в параметре CURLOPT_PROXY_TLSAUTH_TYPE . Требует, чтобытакже был установлен параметр CURLOPT_PROXY_TLSAUTH_USERNAME . | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_TLSAUTH_TYPE | Метод аутентификации TLS, используемый для соединения HTTPS. Поддерживаемый метод — «SRP».
| Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXY_TLSAUTH_USERNAME | Имя пользователя, которое будет использоваться для метода аутентификации TLS прокси-сервера HTTPS, указанного в параметреCURLOPT_PROXY_TLSAUTH_TYPE . Требует, чтобы параметрCURLOPT_PROXY_TLSAUTH_PASSWORD также был установлен. | Доступно с PHP 7.3.0 и libcurl >= cURL 7.52.0. |
CURLOPT_PROXYUSERPWD | Логин и пароль, записанные в виде"[username]:[password]" , используемые присоединении через прокси. | |
CURLOPT_RANDOM_FILE | Имя файла, используемого для инициализации генератора случайных чисел для SSL. | |
CURLOPT_RANGE | Диапазон данных, которые нужно загрузить, в формате"X-Y" , причём либо X, либо Y могут бытьопущены. Протокол HTTP также поддерживает передачу нескольких диапазонов, разделённых запятыми, они задаются в формате "X-Y,N-M" . | |
CURLOPT_REFERER | Содержимое заголовка "Referer: " , который будетиспользован в HTTP-запросе. | |
CURLOPT_SERVICE_NAME | Имя сервиса аутентификации. | Добавлено в cURL 7.43.0. доступно с PHP 7.0.7. |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | Строка, содержащая 32 шестнадцатеричных цифры. Строка должна являться контрольной суммой по алгоритму MD5 открытого ключа удалённого компьютера и libcurl будет сбрасывать соединение к удалённому хосту до тех пор, пока контрольная сумма не будет соответствовать публичному ключу. Эта опция предназначена только для передачи данных с помощью SCP и SFTP. | Добавлено в cURL 7.17.1. |
CURLOPT_SSH_PUBLIC_KEYFILE | Имя файла для вашего публичного ключа. Если не задано, то libcurl использует по умолчанию файл $HOME/.ssh/id_dsa.pub, если переменная окружения HOME установлена и файл «id_dsa.pub» в текущей директории, если переменная HOME не установлена. | Добавлено в cURL 7.16.1. |
CURLOPT_SSH_PRIVATE_KEYFILE | Имя файла для вашего приватного ключа. Если не задано, то libcurl использует по умолчанию файл $HOME/.ssh/id_dsa, если переменная окружения HOME установлена и файл «id_dsa» в текущей директории, если переменная HOME не установлена. Если файл защищён паролем, установите пароль с помощью CURLOPT_KEYPASSWD . | Добавлено в cURL 7.16.1. |
CURLOPT_SSL_CIPHER_LIST | Список шифров, используемый в SSL-передачах. Например,RC4-SHA и TLSv1 являютсякорректными списками шифров. | |
CURLOPT_SSLCERT | Имя файла с корректно отформатированным PEM-сертификатом. | |
CURLOPT_SSLCERTPASSWD | Пароль, необходимый для использования сертификатаCURLOPT_SSLCERT . | |
CURLOPT_SSLCERTTYPE | Формат сертификата. Поддерживаются форматы"PEM" (по умолчанию), "DER" и "ENG" .Начиная с OpenSSL 0.9.3, "P12" (для файлов, закодированных в PKCS#12) | Добавлен в версии cURL 7.9.3. |
CURLOPT_SSLENGINE | Идентификатор механизма шифрования для закрытого ключа SSL, указанного в параметре CURLOPT_SSLKEY . | |
CURLOPT_SSLENGINE_DEFAULT | Идентификатор механизма шифрования, используемого для ассиметричных операций шифрования. | |
CURLOPT_SSLKEY | Имя файла с закрытым ключом SSL. | |
CURLOPT_SSLKEYPASSWD | Тайный пароль, необходимый для использования закрытого
| |
CURLOPT_SSLKEYTYPE | Тип закрытого ключа SSL, указанного в параметреCURLOPT_SSLKEY . Поддерживаются следующиетипы ключей: "PEM" (по умолчанию), "DER" и "ENG" . | |
CURLOPT_TLS13_CIPHERS | Список комплектов шифров для использования в соединении TLS 1. 3. Список должен быть синтаксически правильным, он состоит из одной или нескольких строк набора шифров, разделённых двоеточиями. Эта опция в настоящее время используется только тогда, когда curl собран для использования OpenSSL 1.1.1 или новее. Если вы используете другой бэкенд SSL, вы можете попробовать установить наборы шифров TLS 1.3, используя параметр CURLOPT_SSL_CIPHER_LIST . | Available since PHP 7.3.0 and libcurl >= cURL 7.61.0. Available when built with OpenSSL >= 1.1.1. |
CURLOPT_UNIX_SOCKET_PATH | Разрешает использовать доменные сокеты UNIX в качестве конечной точки для соединения и устанавливает путь к ним равным заданной строке (string). | Добавлено в cURL 7.40.0. Доступно с PHP 7.0.7. |
CURLOPT_URL | Загружаемый URL. Данный параметр может быть также установлен при инициализации сеанса с помощью curl_init(). | |
CURLOPT_USERAGENT | Содержимое заголовка "User-Agent: " , посылаемогов HTTP-запросе. | |
CURLOPT_USERNAME | Имя пользователя для аутентификации. | Добавлено в cURL 7.19.1. Доступно с PHP 5.5.0. |
CURLOPT_USERPWD | Логин и пароль, используемые при соединении, указанные в формате "[username]:[password]" . | |
CURLOPT_XOAUTh3_BEARER | Задаёт токен доступа OAuth 2. 0. | Добавлено в cURL 7.33.0. Доступно с PHP 7.0.7. |
Как пользоваться 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 — выводить контент страницы в файл;
- -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 больше подходит для загрузки файлов и краулинга сайтов.
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.
cURL — веб без котиков
cURL — веб без котиков
Миша Баранов
cURL — веб без котиков
Миша Баранов, PiterJS #24
cURL
Most of us pronounce «curl» with an initial k sound, just like the English word curl.
It rhymes with words like girl and earl
Everything curl
Что это?
- HTTP-клиент
- FTP-клиент
- Менеджер загрузок
- Программа командной строки (CLI)
- Кроссплатформенная
Зачем?
Автоматизация
- Повторные запросы
- Нотификации
- Запросы к API
Отладка
- Кеширование
- Редиректы
- Сжатие
- Всё, что может HTTP
Коротко про CLI
curl --help
curl curl. haxx.se
curl --verbose curl.haxx.se
curl -v curl.haxx.se
curl --userjohn:doe https://curl.haxx.se/
curl -vujohn:doe https://curl.haxx.se/
curl -T "upload this" https://curl.haxx.se/
Как устроен HTTP
--> Подключение
--> Отправка запроса
...
x Закрытие соединения
Стркуктура HTTP-запроса
Стартовая строка
Заголовоки запроса
Стркуктура HTTP-запроса
GET / HTTP/1.1
Host: curl.haxx.se
User-Agent: curl/7.54.0
Стркуктура HTTP-ответа
Стартовая строка
Заголовоки ответа
Пустая строка
Тело ответа
Стркуктура HTTP-ответа
HTTP/1. 1 200 OK
server: Apache
content-length: 8541
<html>
…
</html>
Прежде чем начать
curl -V
curl --version
Простые запросы при помощи cURL
- GET-запрос
- Просмотр заголовков ответа
- Просмотр заголовков запроса и ответа
Простые запросы при помощи cURL
curl https://curl.haxx.se/
curl -i https://curl.haxx.se/
curl -I https://curl.haxx.se/
curl -D headers.txt https://curl.haxx.se/
curl -v https://curl.haxx.se/
Несколько запросов подряд
- Цепочка запросов
- Подстановка символов
Несколько запросов подряд
curl httpstat. us/200 -: -i httpstat.us/300 \ -: -I httpstat.us/400
curl httpstat.us/[500-510]
Сохранение файла
- Перенаправление stdout
- Явное указание имени файла
- Использование имени файла с сервера
Сохранение файла
curl https://curl.haxx.se/logo/curl-logo.svg > logo-1.svg
curl -o logo-2.svg https://curl.haxx.se/logo/curl-logo.svg
curl -O https://curl.haxx.se/logo/curl-logo.svg
Отслеживане перенаправлений
curl curl.haxx.se
curl -L curl.haxx.se
Оправка данных на сервер
- Get + querystring
- POST
- Просто данные
- HTML-форма
- Файл
- PUT
- PATCH
GET + querystring
curl https://postman-echo. com/get?foo=bar&bar=baz
curl -G-d foo1=bar1 -d foo1=bar1 \ https://postman-echo.com/get
POST
curl -X POST -d foo1=bar1 -d foo1=bar1 \ https://postman-echo.com/post
curl -X POST -d "Do you have a cookie?" \ https://postman-echo.com/post
POST
curl -X POST -d '{"message": "Do you have a cookie?"}' \ -H "Content-Type: application/json" \ https://postman-echo.com/post
curl -X POST -d @data.json \ -H "Content-Type: application/json" \ https://postman-echo.com/post
curl -X POST -F [email protected] https://postman-echo.com/post
Авторизация
- HTTP Basic
- Digest
- Cookie
- Kerberos
- oAuth 2
Авторизация
curl -u postman \ https://postman:password@postman-echo. com/basic-auth
curl -u postman \ https://postman-echo.com/basic-auth
curl -u postman:password https://postman-echo.com/basic-auth
curl https://cloud.arrival.com/api/v1/user \ -H 'authorization: Bearer -J3APXXZNNOHPPEZPHDORW'
Убираем лишнее
curl https://cloud.arrival.com/api/v1/user \ -H 'content-type: application/json' \ -H 'authorization: Bearer -J3APXXZNNOHPPEZPHDORW' \ --compressed
curl -K config.txt 'https://cloud.arrival.com/api/v1/user'
Божечки-кошечки!
Happy cURLing!
Спасибо!
Миша Баранов
linux — команда Curl для https (SSL)
, если вы используете самоподписанный сертификат на сервере, вы можете использовать:
curl -k https://example.com:8443/cli/agentCLI -u имя пользователя: пароль
, но имейте в виду, что в этом случае это не лучше, чем использование соединения с сервером без SSL, так как ваше общение больше не будет безопасным, что позволит всевозможным людям атаковать посередине.
Хотя я вам советую скачать .pem
с сервера:
с использованием:
echo "HEAD / HTTP / 1.0 \ n Хост: example.com \ n \ n EOT \ n "| openssl s_client -prexit -connect example.com:8443> cert.pem
на свой компьютер, оставьте в файле только часть между BEGIN CERTIFICATE
и END CERTIFICATE
(включая строки BEGIN / END) и укажите ее как параметр для параметра --cacert
, вы также можете загрузить его. Тогда вы сможете аутентифицировать свой сервер при каждом подключении!
curl --cacert cert.pem https: // example.com: 8443 / cli / agentCLI -u имя пользователя: пароль
Тестирование на моем собственном самозаверяющем сервере, он работает нормально:
% openssl s_client -showcerts -connect example.com:443 dev / null 2> / dev / null | sed -n '/ ----- НАЧАТЬ СЕРТИФИКАТ ----- /, / ----- КОНЕЦ СЕРТИФИКАТА ----- / p' | grep -m1 -B-1 - '----- КОНЕЦ СЕРТИФИКАТА -----'> cert. pem
% curl --cacert cert.pem https://example.com
для примера, который должен работать:
% openssl s_client -showcerts -connect git.cryptolib.org:443 dev / null 2> / dev / null | sed -n '/ ----- НАЧАТЬ СЕРТИФИКАТ ----- /, / ----- КОНЕЦ СЕРТИФИКАТА ----- / p' | grep -m1 -B-1 - '----- КОНЕЦ СЕРТИФИКАТА -----'> cert.pem
% curl --cacert cert.pem https://git.cryptolib.org
curl: (51) SSL: проверка сертификата не удалась (результат: 5)
, но, к сожалению, это не так.
Я тоже пробовал сделать, как здесь предлагают:
% openssl x509 -inform PEM -in cert.pem -text -out certdata.pem
% curl --cacert certdata.pem https: // git.cryptolib.org
Что не работает, потому что этот сайт (git.cryptolib.org), который я использую для тестирования, не самоподписанный, а из цепочки CACert, что можно решить с помощью корневых сертификатов CACert, следуя этому FAQ.
несколько ресурсов, которые нужно копать:
Но однозначного ответа пока нет: -s
ssl — Wget и Curl перестали работать с HTTPS.
Неправильно пожаловаться на просроченный сертификат
У меня есть сценарий, который запускается каждый день на Ubuntu 14.04 сервер. Сценарий представляет собой простую команду wget, которая загружает файл с удаленного сервера и сохраняет его в локальной файловой системе:
wget https://example.com/resources/scripts/myfile.php -O myfile.php
Он работал нормально несколько месяцев до сегодняшнего утра, когда внезапно, когда я запускаю его, я получаю:
--2020-05-30 11:57:16 - https://example.com/resources/scripts/myfile.php
Разрешение example.com (example.com) ... xx.xx.xx.xx
Подключение к example.com (example.com) | xx.xx.xx.xx |: 443 ... подключено.
ОШИБКА: невозможно проверить сертификат example.com, выданный «/ C = GB / ST = Greater Manchester / L = Salford / O = Sectigo Limited / CN = Sectigo RSA Domain Validation Secure Server CA»:
Срок действия выданного сертификата истек.
Чтобы подключиться к example. com небезопасно, используйте --no-check-certificate.
SSL для домена действителен и истекает в январе 2022 года. В этом отношении ничего не изменилось. И все же почему-то wget этого больше не видит.
Вот еще один интересный факт.Если я запускаю ту же самую команду на компьютере с Ubuntu 18, она работает как шарм без каких-либо нареканий. Это говорит мне, что с моей машиной Ubuntu 14.04 что-то не так.
Curl выдает ту же ошибку:
завиток https://example.com
curl: (60) Проблема с сертификатом SSL: срок действия сертификата истек
Это сообщение предполагает, что комплект сертификатов устарел. Я загрузил предложенный файл PEM и попытался запустить wget с указанием —ca-certificate = cacert.pem вариант, но безрезультатно.
Я также пробовал запустить: apt install ca-Certific
и update-ca-Certific
, но это тоже не сработало.
Опять же, все отлично работает с коробкой Ubuntu 18, но не с Ubuntu 14 или 16. И почему все работало нормально до сегодняшнего утра, когда я знаю, что никто не трогал коробку? Ясно, что что-то устарело, но я не могу понять, как это исправить.
Есть ли у кого-нибудь предложения?
Как использовать Curl с протоколом HTTPS и URL-адресами? — ПОФТУТ
Curl — это инструмент и библиотека командной строки, реализующая такие протоколы, как HTTP, HTTPS, FTP и т. Д.Curl также поддерживает протокол HTTPS, который является безопасной версией HTTP. Использование curl может вызвать некоторые проблемы. Мы рассмотрим, как решить эти проблемы, связанные с curl HTTPS.
Мы начнем с установки инструмента curl
с помощью следующей команды.
Ubuntu, Debian, Mint, Kali:
$ sudo apt install curl
Ubuntu, Debian, Mint, Kali:
Fedora, CentOS, RHEL:
.
$ sudo yum установить curl
Специально для самоподписанных сертификатов или сертификатов с истекшим сроком действия.509 или сертификаты SSL / TLS могут создавать проблемы. Подробная информация об ошибке выводится на терминал. В качестве примера мы попытаемся получить доступ к https://www.wikipedia.com и получим ошибку типа
.
curl: (51) SSL: нет альтернативного имени субъекта сертификата, соответствующего имени целевого хоста «www.wikipedia.com»
И мы запускаем следующую команду.
$ локон https://www.wikipedia.com
curl Проблемы SSL / TLS
Чтобы предотвратить эту ошибку и принять небезопасный сертификат, нам необходимо предоставить --insecure
Это примет все предоставленные сертификаты без жалоб на это.
$ curl - небезопасный https://www.wikipedia.com
Разрешить небезопасные подключения
Если мы не хотим использовать предоставленный веб-сайтом сертификат и предоставлять сертификат HTTPS вручную, мы можем использовать параметр -E
или --cert
с файлом сертификата. В этом примере мы будем использовать сертификат с именем wk.cert
для подключения https://www. wikipedia.com.
$ curl -E wk.cert https://www.wikipedia.com
В некоторых случаях нам может потребоваться использовать другую цепочку сертификатов, а не Интернет.Цепочки сертификатов обеспечивают доверительные отношения между иерархическими сертификатами, где лист — это сертификат сайта, по которому мы хотим перемещаться. Центр сертификации — это главный сертификат, который предоставляется фирмами центра сертификации. Мы можем предоставить другой центр сертификации, например локальный центр сертификации нашей компании, с опцией --cacert
.
$ curl --cacert mycompany.cert https://www.mycompany.com
curl — Урок
Фон
Этот документ предполагает, что вы знакомы с HTML и общими сетями.
Растущее количество приложений, перемещающихся в Интернет, сделало «HTTP-сценарии» более востребованными и востребованными. Сегодня важные задачи — иметь возможность автоматически извлекать информацию из Интернета, подделывать пользователей, публиковать или выгружать данные на веб-серверы.
Curl — это инструмент командной строки для выполнения всевозможных манипуляций с URL-адресами и их передачи, но этот конкретный документ будет посвящен тому, как использовать его при выполнении HTTP-запросов для развлечения и получения прибыли. Я предполагаю, что вы знаете, как вызвать curl --help
или curl --manual
, чтобы получить основную информацию об этом.
Curl написан не для того, чтобы делать все за вас. Он делает запросы, он получает данные, он отправляет данные и извлекает информацию. Вероятно, вам нужно склеить все вместе, используя какой-то язык сценариев или повторяющиеся ручные вызовы.
Протокол HTTP
HTTP — это протокол, используемый для получения данных с веб-серверов. Это очень простой протокол, основанный на TCP / IP. Протокол также позволяет отправлять информацию на сервер от клиента, используя несколько различных методов, как будет показано здесь.
HTTP — это простые текстовые строки ASCII, отправляемые клиентом на сервер для запроса определенного действия, а затем сервер отвечает на несколько текстовых строк до того, как фактическое запрошенное содержимое будет отправлено клиенту.
Клиент curl отправляет HTTP-запрос. Запрос содержит метод (например, GET, POST, HEAD и т. Д.), Несколько заголовков запроса, а иногда и тело запроса. HTTP-сервер отвечает строкой состояния (указывающей, все ли прошло хорошо), заголовками ответов и, чаще всего, также телом ответа.«Тело» — это запрошенные вами простые данные, такие как фактический HTML, изображение и т. Д.
См. Протокол
Использование опции curl --verbose
( -v
как короткая опция) покажет, какие команды curl отправляет на сервер, а также несколько других информационных текстов.
--verbose
— самый полезный параметр, когда дело доходит до отладки или даже понимания взаимодействия curl <-> с сервером.
Иногда даже --verbose
недостаточно.Затем --trace
и [ --trace-ascii
] ((https://curl.se/docs/manpage.html#—trace-ascii) предлагают еще более подробную информацию, поскольку они показывают все, что отправляет curl и получает. Используйте это так:
curl --trace-ascii debugdump.txt http://www.example.com/
Сроки
Часто вы можете задаться вопросом, что именно занимает все время, или вы просто хотите знать количество миллисекунд между двумя точками передачи. Для этих и других подобных ситуаций [ --trace-time
] ((https: // curl.se / docs / manpage.html # — trace-time) — это то, что вам нужно. К каждой строке вывода трассировки добавляется время:
curl --trace-ascii d.txt --trace-time http://example.com/
См. Ответ
По умолчанию curl отправляет ответ на стандартный вывод. Вам нужно перенаправить его куда-нибудь, чтобы этого избежать, чаще всего это делается с помощью -o
или -O
.
Спецификация
Формат Uniform Resource Locator — это способ указания адреса определенного ресурса в Интернете.Вы знаете, что вы видели такие URL-адреса, как https://curl.se или https://yourbank. com миллион раз. RFC 3986 — каноническая спецификация. И да, формальное имя — это не URL, а URI.
Хост
Имя хоста обычно преобразуется с помощью DNS или вашего файла / etc / hosts в IP-адрес, и именно с этим curl будет взаимодействовать. В качестве альтернативы вы можете указать IP-адрес непосредственно в URL-адресе вместо имени.
Для разработки и других пробных ситуаций вы можете указать в качестве имени хоста IP-адрес, отличный от того, который использовался бы в противном случае, с помощью параметра curl --resolve
:
curl --resolve www.example.org:80:127.0.0.1 http://www.example.org/
Номер порта
Каждый протокол, поддерживаемый 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/
Имя пользователя и пароль
Некоторые службы настроены так, чтобы требовать аутентификации HTTP, и затем вам необходимо указать имя и пароль, которые затем передаются на удаленный сайт различными способами в зависимости от конкретного используемого протокола аутентификации.
Вы можете либо указать пользователя и пароль в URL-адресе, либо указать их отдельно:
curl http: // user: password@example. org/
или
curl -u пользователь: пароль http://example.org/
Следует обратить внимание на то, что этот вид HTTP-аутентификации не является тем, что обычно делается и запрашивается на ориентированных на пользователя веб-сайтах в наши дни. Вместо этого они, как правило, используют формы и файлы cookie.
Часть пути
Часть пути просто отправляется на сервер, чтобы запросить отправку связанного ответа.Путь — это то, что находится справа от косой черты, следующей за именем хоста и, возможно, номером порта.
ПОЛУЧИТЬ
Самый простой и наиболее распространенный запрос / операция, выполняемая с использованием HTTP, — это ПОЛУЧЕНИЕ URL. Сам URL-адрес может относиться к веб-странице, изображению или файлу. Клиент отправляет серверу запрос GET и получает запрошенный документ. Если вы вводите командную строку
завиток https://curl.se
, вы получаете веб-страницу, возвращаемую в окно терминала. Весь HTML-документ, содержащийся в этом URL.
Все ответы HTTP содержат набор заголовков ответов, которые обычно скрыты, используйте параметр curl --include
( -i
), чтобы отобразить их, а также остальную часть документа.
ГОЛОВКА
Вы можете запросить у удаленного сервера ТОЛЬКО заголовки, используя параметр --head
( -I
), который заставит curl выдавать запрос HEAD. В некоторых особых случаях серверы отклоняют метод HEAD, в то время как другие все еще работают, что вызывает особенное раздражение.
Метод HEAD определен и сделан так, чтобы сервер возвращал заголовки точно так же, как это было бы для GET, но без тела. Это означает, что вы можете увидеть Content-Length:
в заголовках ответа, но в ответе HEAD не должно быть фактического тела.
Несколько 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
Несколько методов HTTP в одной командной строке
Иногда вам нужно работать с несколькими URL-адресами в одной командной строке и использовать для каждого разные методы HTTP.Для этого вам понравится опция --next
. По сути, это разделитель, который отделяет несколько вариантов от следующих. Все URL-адреса до --next
получат один и тот же метод и объединят все данные POST в один.
Когда curl достигает значения --next
в командной строке, он как бы сбрасывает метод и данные POST и разрешает новый набор.
Возможно, лучше всего это показать на нескольких примерах. Чтобы отправить сначала HEAD, а затем GET:
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
Формы объяснения
Формы
— это общий способ, которым веб-сайт может представить HTML-страницу с полями, в которые пользователь может ввести данные, а затем нажать какую-то кнопку «ОК» или «Отправить», чтобы получить эти данные, отправленные на сервер. Затем сервер обычно использует опубликованные данные, чтобы решить, как действовать.Подобно использованию введенных слов для поиска в базе данных или добавления информации в систему отслеживания ошибок, отображение введенного адреса на карте или использование информации в качестве приглашения для входа в систему, подтверждающего, что пользователю разрешено видеть, о чем идет речь чтобы увидеть.
Конечно, на стороне сервера должна быть какая-то программа для приема отправляемых вами данных. Вы не можете просто изобрести что-то из воздуха.
ПОЛУЧИТЬ
Форма GET использует метод GET, как указано в HTML, например:
В вашем любимом браузере появится эта форма с текстовым полем, которое необходимо заполнить, и кнопкой с надписью «ОК».Если вы введете «1905» и нажмете кнопку «ОК», ваш браузер создаст для вас новый URL-адрес. К URL-адресу будет добавлено junk.cgi? Birthyear = 1905 & press = OK
, добавленное к части пути предыдущего URL-адреса.
Если исходная форма была видна на странице www.example.com/when/birth.html
, вторая страница, которую вы получите, станет www.example.com/when/junk.cgi?birthyear=1905&press= ОК
.
Большинство поисковых систем работают именно так.
Чтобы curl выполнял за вас сообщение формы GET, просто введите ожидаемый созданный URL:
curl "http: // www. example.com/when/junk.cgi?birthyear=1905&press=OK "
ПОСТ
Метод GET позволяет отображать все имена полей ввода в поле URL-адреса вашего браузера. Обычно это хорошо, когда вы хотите иметь возможность добавить в закладки эту страницу с вашими данными, но это очевидный недостаток, если вы ввели секретную информацию в одно из полей или если есть большое количество полей, создающих очень длинные и нечитаемый URL.
Затем протокол HTTP предлагает метод POST.Таким образом, клиент отправляет данные, отделенные от URL-адреса, и поэтому вы не увидите их в поле URL-адреса.
Форма будет очень похожа на предыдущую:
И чтобы использовать curl для публикации этой формы с теми же данными, что и раньше, мы могли бы сделать это так:
curl --data "Birthyear = 1905 & press =% 20OK% 20" http://www.example.com/when.cgi
Этот тип POST будет использовать Content-Type `application / x-www-form-urlencoded ‘и является наиболее широко используемым типом POST.
Данные, которые вы отправляете на сервер, ДОЛЖНЫ быть уже правильно закодированы, curl не сделает этого за вас. Например, если вы хотите, чтобы данные содержали пробел, вам необходимо заменить это пространство на% 20 и т. Д. Несоблюдение этого требования, скорее всего, приведет к неправильному получению данных и их искажению.
Последние версии curl могут фактически использовать url-кодирование данных POST для вас, например:
curl --data-urlencode "name = Я Даниэль" http://www.example.com
Если вы повторите --data
несколько раз в командной строке, curl объединит все заданные части данных и поместит символы и
между каждым сегментом данных.
Загрузка файла POST
Еще в конце 1995 года они определили дополнительный способ отправки данных через HTTP. Это описано в RFC 1867, поэтому этот метод иногда называют RFC1867-posting.
Этот метод в основном разработан для лучшей поддержки загрузки файлов. Форма, которая позволяет пользователю загружать файл, может быть написана в HTML так:
Это ясно показывает, что Content-Type, который будет отправлен, — это multipart / form-data
.
Чтобы отправить сообщение в такую форму с помощью curl, введите командную строку, например:
curl --form upload = @ localfilename --form press = OK [URL]
Скрытые поля
Очень распространенный способ передачи информации о состоянии между страницами приложениями на основе HTML — это добавление скрытых полей в формы.Скрытые поля уже заполнены, они не отображаются для пользователя и передаются, как и все другие поля.
Аналогичный пример формы с одним видимым полем, одним скрытым полем и одной кнопкой отправки может выглядеть так:
Чтобы отправить это сообщение с помощью curl, вам не придется думать о том, скрыты поля или нет. Для завивки они все одинаковые:
curl --data "Birthyear = 1905 & press = OK & person = daniel" [URL]
Определите, как выглядит POST
Когда вы собираетесь заполнить форму и отправить ее на сервер с помощью curl вместо браузера, вы, конечно, очень заинтересованы в отправке POST точно так же, как это делает ваш браузер.
Легкий способ увидеть это — сохранить HTML-страницу с формой на локальном диске, изменить «метод» на GET и нажать кнопку отправки (вы также можете изменить URL-адрес действия, если хотите ).
После этого вы четко увидите, как данные добавляются к URL-адресу, разделенные знаком ?
-буквенное обозначение, как предполагается в формах GET.
ПУТ
Возможно, лучший способ загрузить данные на HTTP-сервер — использовать PUT. С другой стороны, это, конечно же, требует, чтобы кто-то поместил программу или сценарий на стороне сервера, который знает, как получить поток HTTP PUT.
Поместите файл на HTTP-сервер с помощью curl:
curl - файл загрузки файла загрузки http://www.example.com/receive.cgi
Базовая аутентификация
HTTP-аутентификация — это возможность сообщить серверу ваше имя пользователя и пароль, чтобы он мог подтвердить, что вам разрешено выполнять запрос, который вы делаете. Базовая аутентификация, используемая в HTTP (тип, который используется curl по умолчанию), основан на текстовом на основе , что означает, что он отправляет имя пользователя и пароль только в слегка запутанном виде, но все же полностью читаемый любым, кто обнюхивает сеть между вами и удаленным сервер.
Чтобы указать curl использовать пользователя и пароль для аутентификации:
curl - имя пользователя: пароль http://www.example.com
Другая проверка подлинности
Для сайта может потребоваться другой метод аутентификации (проверьте заголовки, возвращаемые сервером), и тогда подходящими вариантами могут быть --ntlm
, --digest
, --negotiate
или даже --anyauth
. ты.
Аутентификация прокси
Иногда доступ по протоколу HTTP доступен только через прокси-сервер HTTP.Кажется, это особенно характерно для различных компаний. Прокси-сервер HTTP может потребовать своего собственного пользователя и пароля, чтобы позволить клиенту выйти в Интернет. Чтобы указать их с помощью curl, введите что-то вроде:
curl --proxy-user proxyuser: proxypassword curl.se
Если ваш прокси-сервер требует, чтобы аутентификация выполнялась методом NTLM, используйте --proxy-ntlm
, если требуется дайджест, используйте --proxy-digest
.
Если вы используете любую из этих опций «пользователь + пароль», но опускаете часть пароля, curl запросит пароль в интерактивном режиме.
Скрытие учетных данных
Обратите внимание, что когда программа запущена, ее параметры можно будет увидеть при перечислении запущенных процессов системы. Таким образом, другие пользователи могут следить за вашими паролями, если вы передадите их в виде простых параметров командной строки. Есть способы обойти это.
Стоит отметить, что хотя именно так работает HTTP-аутентификация, очень многие веб-сайты не будут использовать эту концепцию, когда они предоставляют логины и т. Д. См. Главу Web Login ниже для более подробной информации.
Referer
HTTP-запрос может включать поле «referer» (да, оно написано с ошибкой), которое может использоваться, чтобы определить, с какого URL-адреса клиент перешел на этот конкретный ресурс. Некоторые программы / скрипты проверяют поле referer запросов, чтобы убедиться, что оно не пришло с внешнего сайта или неизвестной страницы. Хотя это глупый способ проверить что-то, что так легко подделать, многие скрипты все же это делают. Используя curl, вы можете поместить все, что хотите, в поле referer и, таким образом, легче обмануть сервер, чтобы он обслужил ваш запрос.
Используйте curl для установки поля реферера с:
curl --referer http: //www.example.come http://www.example.com
Агент пользователя
Очень похоже на поле referer, все HTTP-запросы могут устанавливать поле User-Agent. Он указывает, какой пользовательский агент (клиент) используется. Многие приложения используют эту информацию, чтобы решить, как отображать страницы. Глупые веб-программисты пытаются сделать разные страницы для пользователей разных браузеров, чтобы они выглядели как можно лучше для их конкретных браузеров.Обычно они также создают различные типы javascript, vbscript и т. Д.
Иногда вы видите, что получение страницы с помощью curl не возвращает ту же страницу, которую вы видите при открытии страницы в своем браузере. Тогда вы знаете, что пришло время установить поле User Agent, чтобы заставить сервер думать, что вы один из тех браузеров.
Чтобы curl выглядел как Internet Explorer 5 в Windows 2000:
curl --user-agent "Mozilla / 4.0 (совместимо; MSIE 5.01; Windows NT 5.0) "[URL]
Или почему бы не выглядеть так, будто вы используете Netscape 4.73 на старом Linux:
curl --user-agent "Mozilla / 4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL]
Перенаправляет
Когда ресурс запрашивается с сервера, ответ сервера может включать подсказку о том, куда браузер должен перейти дальше, чтобы найти эту страницу, или новую страницу, содержащую вновь сгенерированный вывод. Заголовок, который сообщает браузеру о перенаправлении, — . Местоположение:
.
Curl не следует за заголовками Location:
по умолчанию, а просто отображает такие страницы таким же образом, как и все ответы HTTP. Однако в нем есть опция, которая заставит его пытаться следовать указателям Location:
.
Указать curl следовать за местоположением:
curl - расположение http://www.example.com
Если вы используете curl для POST на сайт, который немедленно перенаправляет вас на другую страницу, вы можете безопасно использовать --location
( -L
) и --data
/ --form
вместе.curl будет использовать POST только в первом запросе, а затем вернется к GET в следующих операциях.
Другие перенаправления
Браузер обычно поддерживает как минимум два других способа перенаправления, которые не поддерживает curl: сначала html может содержать мета-тег обновления, который просит браузер загрузить определенный URL-адрес через заданное количество секунд, или он может использовать для этого javascript .
Основы cookie
Веб-браузеры осуществляют «контроль состояния на стороне клиента» с помощью файлов cookie.Файлы cookie — это просто имена со связанным содержимым. Файлы cookie отправляются клиенту сервером. Сервер сообщает клиенту, для какого пути и имени хоста он хочет, чтобы cookie был отправлен обратно, а также отправляет дату истечения срока и еще несколько свойств.
Когда клиент связывается с сервером с именем и путем, указанными ранее в полученном файле cookie, клиент отправляет файлы cookie и их содержимое на сервер, если, конечно, срок их действия не истек.
Многие приложения и серверы используют этот метод для соединения серии запросов в один логический сеанс.Чтобы иметь возможность использовать curl в таких случаях, мы должны иметь возможность записывать и отправлять файлы cookie так, как их ожидает веб-приложение. Точно так же с ними работают и браузеры.
Варианты печенья
Самый простой способ отправить несколько файлов cookie на сервер при получении страницы с помощью curl — это добавить их в командную строку, например:
curl --cookie "name = Daniel" http://www.example.com
Файлы cookie отправляются как обычные заголовки HTTP. Это практично, поскольку позволяет curl записывать файлы cookie, просто записывая заголовки.Запишите файлы cookie с помощью curl с помощью параметра --dump-header
( -D
), например:
curl --dump-header headers_and_cookies http://www.example.com
(Обратите внимание, что параметр --cookie-jar
, описанный ниже, является лучшим способом хранения файлов cookie.)
Curl имеет встроенный полнофункциональный механизм синтаксического анализа файлов cookie, который используется, если вы хотите повторно подключиться к серверу и использовать файлы cookie, которые были сохранены из предыдущего подключения (или вручную созданы вручную, чтобы обмануть сервер, чтобы он поверил, что у вас был предыдущий связь).Чтобы использовать ранее сохраненные файлы cookie, вы запускаете curl, например:
curl --cookie stored_cookies_in_file http://www.example.com
«Механизм cookie»
Curl включается, когда вы используете параметр --cookie
. Если вы хотите, чтобы curl распознавал полученные файлы cookie, используйте --cookie
с файлом, который не существует. Например, если вы хотите, чтобы curl понимал файлы cookie со страницы и отслеживал местоположение (и, таким образом, возможно, отправлял полученные файлы cookie), вы можете вызвать его, например:
curl --cookie nada - расположение http: // www.example.com
Curl имеет возможность читать и записывать файлы cookie, которые используют тот же формат файлов, который когда-то использовали Netscape и Mozilla. Это удобный способ обмена файлами cookie между скриптами или вызовами. Переключатель --cookie
( -b
) автоматически определяет, является ли данный файл таким файлом cookie, и анализирует его, а с помощью параметра --cookie-jar
( -c
) вы делаете curl записывает новый файл cookie в конце операции:
curl - печенье.txt --cookie-jar newcookies.txt http://www. example.com
HTTPS — безопасный протокол HTTP
Есть несколько способов сделать безопасную передачу HTTP. Безусловно, наиболее распространенный протокол для этого — так называемый HTTPS, HTTP через SSL. SSL шифрует все данные, которые отправляются и принимаются по сети, и, таким образом, затрудняет злоумышленникам слежку за конфиденциальной информацией.
SSL (или TLS, как называется последняя версия стандарта) предлагает массу расширенных функций, позволяющих обеспечить все те механизмы шифрования и ключевые механизмы инфраструктуры, которые требуются для шифрования HTTP.
Curl поддерживает зашифрованные выборки при создании для использования библиотеки TLS, и его можно построить для использования одной из довольно большого набора библиотек — curl -V
покажет, какой из них был создан для использования вашего curl (если есть!). Чтобы получить страницу с HTTPS-сервера, просто запустите curl, например:
curl https://secure. example.com
Сертификаты
В мире HTTPS вы используете сертификаты для подтверждения того, что вы тот, кем вы себя называете, в качестве дополнения к обычным паролям.Curl поддерживает сертификаты на стороне клиента. Все сертификаты заблокированы парольной фразой, которую необходимо ввести, прежде чем сертификат можно будет использовать в curl. Парольную фразу можно указать в командной строке или, если нет, ввести интерактивно, когда curl запрашивает ее. Используйте сертификат с curl на сервере HTTPS, например:
curl --cert mycert.pem https://secure.example.com
curl также пытается проверить, является ли сервер тем, кем он является, путем проверки сертификата сервера по локально сохраненному пакету сертификатов CA.Отсутствие проверки приведет к тому, что curl отклонит соединение. Затем вы должны использовать --insecure
( -k
) в случае, если вы хотите указать curl, чтобы он игнорировал, что сервер не может быть проверен.
Подробнее о проверке сертификата сервера и пакетах сертификатов CA можно прочитать в документе SSLCERTS.
Иногда у вас может получиться собственное хранилище сертификатов CA, и тогда вы можете указать curl использовать его для проверки сертификата сервера:
curl --cacert ca-bundle.pem https://example.com/
Метод изменения и заголовки
Делая что-то необычное, вам может понадобиться добавить или изменить элементы одного запроса curl.
Например, вы можете изменить POST-запрос на PROPFIND и отправить данные как Content-Type: text / xml
(вместо Content-Type по умолчанию) следующим образом:
curl --data "" --header "Content-Type: text / xml" --request PROPFIND example.com
Вы можете удалить заголовок по умолчанию, указав заголовок без содержимого.Как будто вы можете испортить запрос, отрубив Host: header:
curl --header "Хост:" http://www.example. com
Точно так же можно добавлять заголовки. Вашему серверу может потребоваться заголовок Destination:
, и вы можете добавить его:
curl --header "Назначение: http: // нигде" http://example.com
Подробнее об измененных методах
Следует отметить, что curl самостоятельно выбирает, какие методы использовать, в зависимости от того, какое действие запрашивать. -d
выполнит POST, -I
выполнит HEAD и так далее. Если вы используете опцию --request
/ -X
, вы можете изменить метод, который выбирает ключевое слово curl, но вы не измените поведение curl. Это означает, что если вы, например, используете -d «data» для выполнения POST, вы можете изменить метод на PROPFIND
с -X
, и curl все равно будет думать, что он отправляет POST. Вы можете изменить обычный GET на метод POST, просто добавив -X POST
в командную строку, например:
curl -X POST http: // example. org /
… но curl по-прежнему будет думать и действовать так, как если бы он отправил GET, поэтому он не будет отправлять тело запроса и т. Д.
Некоторые приемы входа в систему
Хотя это не только связано с HTTP, но все же вызывает множество проблем у людей, поэтому вот краткое изложение того, как работает подавляющее большинство всех форм входа в систему и как войти в них с помощью curl.
Также можно отметить, что для того, чтобы сделать это правильно в автоматическом режиме, вам, безусловно, нужно будет создавать сценарии и выполнять несколько вызовов curl и т. Д.
Во-первых, серверы в основном используют файлы cookie для отслеживания состояния входа клиента в систему, поэтому вам нужно будет фиксировать файлы cookie, которые вы получаете в ответах. Затем многие сайты также устанавливают специальный файл cookie на странице входа (чтобы убедиться, что вы попали туда через их страницу входа), поэтому вы должны иметь привычку сначала получать страницу формы входа для захвата установленных там файлов cookie.
Некоторые веб-системы входа в систему содержат различное количество JavaScript, и иногда они используют такой код для установки или изменения содержимого файлов cookie.Возможно, они делают это для предотвращения запрограммированных входов в систему, как в этом руководстве описано, как … В любом случае, если чтения кода недостаточно, чтобы позволить вам повторить поведение вручную, захват HTTP-запросов, выполняемых вашими браузерами, и анализ отправленных файлов cookie Обычно это рабочий метод, позволяющий решить, как сократить потребность в javascript.
В фактическом теге
Добавить комментарий