Содержание

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&param2=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 флагом, и соответственно мог упустить уйму важных ее возможностей. Советую использовать ее как доп утилиту в папке проекта или где попало, не советую в продакшен использовать везде где попало, ну или если с головой подходить к флагам компиляции и сделать это хорошо и по настоящему, у меня такой цели не стоит, делаю на скорую руку, просто как рабочее решение.

  1. Устанавливаем openssl

    apt-get install -y openssl

  2. Настраиваем в 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
```
  1. Проверяем что у нас появилась поддержка ГОСТ движков в openssl.

    root@b2d31954e0e6:# openssl ciphers|tr ‘:’ ‘\n’ | grep GOS

    GOST2001-GOST89-GOST89

    GOST94-GOST89-GOST89

    root@b2d31954e0e6:#

  2. Качаем последнюю версию curl по ссылке https://curl.haxx.se/download.html, в моем случае это было https://curl. haxx.se/download/curl-7.49.1.tar.gz

  3. Качаем куда удобно и распаковываем, я работал в ~

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
«`

  1. Устанавливаем libssl-dev и утилиту make

    apt-get install libssl-dev make

  2. Пересобираем и компилируем curl с поддержкой локальной версии openssl.

    cd curl-7.49.1/

    ./configure —with-ssl

    make

  3. В результате у нас должна появиться скомпилированая утилита в папке 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
«`

  1. Используем готовую утилиту по своему усмотрению 🙂

    src/curl https://example. com/ —cacert /cacer-2015.pem

  2. Для конвертации файлакорневого сертификата КРИПТОПРО из формата 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

PHP: curl_setopt — Manual

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

Собственный метод запроса, используемый вместо
"GET" или "HEAD"
при выполнении HTTP-запроса. Это полезно при запросах
"DELETE" или других, более редких HTTP-запросах.
Корректными значениями будут такие как "GET",
"POST", "CONNECT" и так далее;
т.е. не вводите здесь всю строку с HTTP-запросом. Например,
указание "GET /index.html HTTP/1.0\r\n\r\n"
будет неправильным.

Замечание:

Не используйте эту возможность пока не убедитесь, что
сервер поддерживает данный тип запроса.

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-запросе.
Этот параметр может быть передан
как в качестве url-закодированной строки, наподобие
para1=val1&para2=val2&...‘, так и
в виде массива, ключами которого будут имена полей, а значениями
— их содержимое.
Если value является массивом,
заголовок Content-Type будет установлен в
значение multipart/form-data.

Файлы можно отправлять с использованием CURLFile,
в этом случае value должен быть массивом.

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».

Замечание:

Аутентификация Secure Remote Password (SRP) для TLS обеспечивает взаимную аутентификацию,
если обе стороны имеют общий секрет. Чтобы использовать TLS-SRP, вы также должны установить
параметры CURLOPT_PROXY_TLSAUTH_USERNAME и
CURLOPT_PROXY_TLSAUTH_PASSWORD.

Доступно с 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

Тайный пароль, необходимый для использования закрытого
ключа SSL, указанного параметром
CURLOPT_SSLKEY.

Замечание:

Так как этот параметр содержит ценный пароль, помните,
что данный PHP-скрипт нужно хранить в безопасном месте.

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

В фактическом теге

для входа в систему многие сайты заполняют случайные / сеансные или иным образом секретно сгенерированные скрытые теги, и вам может потребоваться сначала захватить HTML-код для формы входа и извлечь все скрытые поля, чтобы иметь возможность выполнить правильный вход в систему POST.Помните, что содержимое должно быть закодировано в URL-адресе при отправке в обычном POST.

Некоторые приемы отладки

Много раз, когда вы запускаете curl на сайте, вы замечаете, что этот сайт не реагирует на ваши запросы curl так же, как на запросы вашего браузера.

Затем вам нужно сделать ваши запросы curl более похожими на запросы вашего браузера:

  • Используйте параметр --trace-ascii для хранения полностью подробных журналов запросов для облегчения анализа и лучшего понимания

  • Убедитесь, что вы проверяете и используете файлы cookie при необходимости (как чтение с помощью --cookie , так и запись с помощью --cookie-jar )

  • Установите user-agent (с -A ) на один, как в недавнем популярном браузере

  • Установить реферер (с -E ), как в браузере

  • Если вы используете POST, убедитесь, что вы отправляете все поля и в том же порядке, что и браузер.

Проверьте, что делают браузеры

Очень хороший помощник, чтобы убедиться, что вы все делаете правильно, — это инструменты разработчика веб-браузеров, которые позволяют просматривать все отправленные и получаемые заголовки (даже при использовании HTTPS).

Более грубый подход — захватить HTTP-трафик в сети с помощью таких инструментов, как Wireshark или tcpdump, и проверить, какие заголовки были отправлены и получены браузером. (HTTPS заставляет вас использовать для этого SSLKEYLOGFILE .)

Команда

Curl в Linux с примерами

curl — это утилита командной строки для передачи данных с сервера или на сервер, предназначенная для работы без вмешательства пользователя.С curl вы можете загружать или выгружать данные, используя один из поддерживаемых протоколов, включая HTTP, HTTPS, SCP, SFTP и FTP. curl предоставляет ряд опций, позволяющих возобновить передачу, ограничить полосу пропускания, поддержку прокси, аутентификацию пользователя и многое другое.

В этом руководстве мы покажем вам, как использовать инструмент curl, на практических примерах и подробных объяснениях наиболее распространенных параметров завивки.

Установка Curl #

Пакет curl предустановлен сегодня в большинстве дистрибутивов Linux.

Чтобы проверить, установлен ли пакет Curl в вашей системе, откройте консоль, введите curl и нажмите Enter. Если у вас установлено curl , система напечатает curl: для получения дополнительной информации попробуйте curl --help или curl --manual . В противном случае вы увидите что-то вроде curl command not found .

Если curl не установлен, вы можете легко установить его с помощью диспетчера пакетов вашего дистрибутива.

Установить Curl на Ubuntu и Debian #

  sudo apt update   sudo apt install curl  

Установить Curl на CentOS и Fedora #

  sudo yum install curl  

Как использовать синтаксис

#

для curl команда выглядит следующим образом:

В простейшей форме, при вызове без каких-либо параметров, curl отображает указанный ресурс в стандартном выводе.

Например, чтобы получить пример .com , которую вы должны запустить:

  curl example.com  

Команда напечатает исходный код домашней страницы example.com в окне вашего терминала.

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

Сохранение вывода в файл #

Чтобы сохранить результат команды curl , используйте параметр -o или -O .

Нижний регистр -o сохраняет файл с предопределенным именем файла, которое в примере ниже vue-v2.6.10.js :

  curl -o vue-v2.6.10.js https: // cdn. jsdelivr.net/npm/vue/dist/vue.js  

Прописные буквы -O сохраняет файл с исходным именем:

  curl -O https://cdn.jsdelivr.net/npm/vue/dist /vue.js  

Загрузка нескольких файлов #

Для одновременной загрузки нескольких файлов используйте несколько параметров -O , за которыми следует URL-адрес файла, который вы хотите загрузить.

В следующем примере мы загружаем iso-файлы Arch Linux и Debian:

  curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64 .iso \   -O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso  

Возобновить загрузку #

You можно возобновить загрузку с помощью опции -C - . Это полезно, если ваше соединение прерывается во время загрузки большого файла, и вместо того, чтобы начинать загрузку с нуля, вы можете продолжить предыдущую.

Например, если вы загружаете iso-файл Ubuntu 18.04 с помощью следующей команды:

  curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso  

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

  curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64. iso  

HTTP-заголовки представляют собой пары «ключ-значение», разделенные двоеточиями, содержащие такую ​​информацию, как пользовательский агент, тип контента и кодировка.Заголовки передаются между клиентом и сервером с запросом или ответом.

Используйте опцию -I для получения только HTTP-заголовков указанного ресурса:

  curl -I --http2 https://www.ubuntu.com/  

Проверить, поддерживает ли веб-сайт HTTP / 2 #

Чтобы проверить, поддерживает ли конкретный URL новый протокол HTTP / 2, загрузите заголовки HTTP с помощью -I вместе с параметром --http2 :

  curl -I --http2 -s https: / / linuxize.com / | grep HTTP  

Параметр -s указывает curl работать в тихом (тихом) режиме и скрывать индикатор выполнения и сообщения об ошибках.

Если удаленный сервер поддерживает HTTP / 2, curl печатает HTTP / 2. 0 200 :

  HTTP / 2 200
  

В противном случае ответ будет HTTP / 1.1 200 :

  HTTP / 1.1 200 OK
  

Если у вас curl версии 7.47.0 или новее, вам не нужно использовать параметр --http2 , поскольку HTTP / 2 включен по умолчанию для всех HTTPS-соединений.

Follow Redirects #

По умолчанию curl не следует за заголовками HTTP Location.

Если вы попытаетесь получить версию google.com без www, вы заметите, что вместо получения источника страницы вы будете перенаправлены на версию www:

  curl google.com  

Параметр -L указывает curl следовать любому перенаправлению, пока не достигнет конечного пункта назначения:

  curl -L google.com  

Изменить User-Agent #

Иногда при загрузке файла удаленный сервер может быть настроен так, чтобы блокировать Curl User-Agent или возвращать различное содержимое в зависимости от устройства посетителя и браузера.

В подобных ситуациях для эмуляции другого браузера используйте параметр -A .

Например, для эмуляции Firefox 60 вы должны использовать:

  curl -A "Mozilla / 5.0 (X11; Linux x86_64; rv: 60.0) Gecko / 20100101 Firefox / 60.0" https: // getfedora.org /  

Укажите максимальную скорость передачи #

Параметр --limit-rate позволяет ограничить скорость передачи данных. Значение может быть выражено в байтах, килобайтах с суффиксом k , мегабайтах с суффиксом m и гигабайтах с суффиксом g .

В следующем примере curl загрузит двоичный файл Go и ограничит скорость загрузки до 1 МБ:

  curl --limit-rate 1m -O https: // dl.google.com/go/go1.10.3.linux-amd64.tar.gz  

Этот параметр полезен для предотвращения использования curl всей доступной полосы пропускания.

Передача файлов через FTP #

Чтобы получить доступ к защищенному FTP-серверу с curl , используйте опцию -u и укажите имя пользователя и пароль, как показано ниже:

  curl -u FTP_USERNAME: FTP_PASSWORD ftp: // ftp. example.com/  

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

Вы можете загрузить отдельный файл с FTP-сервера, используя следующий синтаксис:

  curl -u FTP_USERNAME: FTP_PASSWORD ftp://ftp.example.com/file.tar.gz  

Чтобы загрузить файл на FTP-сервер, используйте -T , за которым следует имя файла, который вы хотите загрузить:

  curl -T newfile.tar.gz -u FTP_USERNAME: FTP_PASSWORD ftp://ftp.example.com/  

Отправка файлов cookie #

Иногда вам может потребоваться отправить HTTP-запрос с определенными файлами cookie для доступа к удаленному ресурсу или для устранения проблемы.

По умолчанию при запросе ресурса с curl файлы cookie не отправляются и не сохраняются.

Чтобы отправить файлы cookie на сервер, используйте переключатель -b , за которым следует имя файла, содержащего файлы cookie, или строку.

Например, чтобы загрузить rpm-файл Oracle Java JDK jdk-10.0.2_linux-x64_bin.rpm , вам необходимо передать файл cookie с именем oraclelicense со значением a :

  curl -L -b "oraclelicense = a" -O http: // download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm  

Использование прокси-серверов #

curl поддерживает различные типы HTTP-прокси, включая HTTPS. и НОСКИ. Для передачи данных через прокси-сервер используйте параметр -x ( --proxy ), за которым следует URL-адрес прокси.

Следующая команда загружает указанный ресурс с помощью прокси на 192.168.44.1 порт 8888 :

  curl -x 192.168.44.1: 8888 http://linux.com/  

Если прокси-сервер требует аутентификации, используйте параметр -U ( --proxy-user ), за которым следуют имя пользователя и пароль, разделенные двоеточием. ( пользователь: пароль ):

  curl -U имя пользователя: пароль -x 192.168.44.1:8888 http://linux.com/  

Заключение #

curl — это инструмент командной строки, который позволяет вы можете передавать данные с удаленного хоста или на него. Это полезно для устранения неполадок, загрузки файлов и многого другого.

Примеры, показанные в этом руководстве, просты, но демонстрируют наиболее часто используемые параметры curl и призваны помочь вам понять, как работает команда curl .

Для получения дополнительной информации о curl посетите страницу документации Curl.

Если у вас есть вопросы или отзывы, не стесняйтесь оставлять комментарии.

linux — как использовать curl, чтобы проверить, отозван ли сертификат сайта?

Похоже, нельзя просто подтвердить сайт одним простым запросом.См. Https://stackoverflow.com/questions/16244084/how-to-programmatically-check-if-a-certificate-has-been-revoked?lq=1 и более старые связанные вопросы по stackoverflow.

curl не работал с списками отзыва сертификатов для меня ни в Windows, ни в Linux. Почему вы должны использовать curl ? Openssl кажется более подходящим:

  openssl s_client -connect www.google.com:443
  

Получаем

  ---
Цепочка сертификатов
 0 с: / C = US / ST = California / L = Mountain View / O = Google Inc / CN = www.google.com
   i: / C = US / O = Google Inc / CN = Google Internet Authority G2
 1 с: / C = US / O = Google Inc / CN = Google Internet Authority G2
   i: / C = США / O = GeoTrust Inc./CN=GeoTrust Global CA
 2 с: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA
   i: / C = US / O = Equifax / OU = центр сертификации Equifax Secure
---
  

Затем мы можем проверить какой-нибудь сертификат:

  curl http://pki.google.com/GIAG2.crt | openssl x509 -inform der -text
  

grep crl в выводе вышеуказанной команды. Интересные части:

  X509v3 Точки распространения CRL:
            URI: http: //crl.geotrust.com/crls/gtglobal.crl

        Доступ к информации о полномочиях:
            OCSP - URI: http: //gtglobal-ocsp.geotrust.com
  

Теперь мы можем вручную проверить crl:

  curl http://crl.geotrust.com/crls/gtglobal.crl | openssl crl -inform der -text
curl http://pki.google.com/GIAG2.crl | openssl crl -inform der -text
  

Теперь мы видим список отозванных сертификатов.ИМХО, использовать curl недостаточно, для проверки сертификатов нужна другая программа. Сделав простой

  strace curl https://www.google.com -v
  

мы видим, что curl не проверяет отзывы (даже не подключается к соответствующим местам). Там просто написано

  * Сертификат сервера:
* тема: C = США; ST = Калифорния; L = вид на горы; O = Google Inc; CN = www.google.com
* Дата начала: 2014-04-09 11:40:11 GMT
* срок действия: 2014-07-08 00:00:00 GMT
* subjectAltName: www. google.com соответствует
* эмитент: C = US; O = Google Inc; CN = Google Internet Authority G2
* Подтвердите сертификат SSL в порядке.
  

Как получить и использовать сертификаты с помощью curl

Как получить и использовать сертификаты с помощью curl — 1 ответ

Сеть обмена стеков

Сеть Stack Exchange состоит из 176 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.

Посетить Stack Exchange

  1. 0

  2. +0

  3. Авторизоваться
    Подписаться

Super User — это сайт вопросов и ответов для компьютерных энтузиастов и опытных пользователей. Регистрация займет всего минуту.

Зарегистрируйтесь, чтобы присоединиться к этому сообществу

Кто угодно может задать вопрос

Кто угодно может ответить

Лучшие ответы голосуются и поднимаются наверх

Спросил

Просмотрено
69k раз

  1. Ввод следующей команды

      curl -k email @ mail. com: пароль https://www.example.com
      

    Возвращает следующую ошибку

        
     301 перемещено   
    

    301 перемещен

    Документ перемещен здесь . бадаут
  2. после загрузки файла cacert.crt отсюда

      http: // www.cacert.org/index.php?id=3
      

    Затем переименовал файл cacert.crt в cacert.pem

    Потом попробовал:

      curl --cacert /path/to/cacert.pem [email protected]: пароль https://www.example.com
      

    Но получаю ту же ошибку.

  3. Затем попробуем:

      завиток https://www.example.com
      

    Я получаю эту ошибку

    curl: (60) Проблема с сертификатом SSL: невозможно получить сертификат местного эмитента
    Подробнее здесь: http: // curl. haxx.se/docs/sslcerts.html

    curl по умолчанию выполняет проверку сертификата SSL, используя «связку» открытых ключей центра сертификации (CA) (сертификаты CA). Если файл пакета по умолчанию не подходит, вы можете указать альтернативный файл с помощью параметра —cacert.
    Если этот HTTPS-сервер использует сертификат, подписанный ЦС, представленным в комплекте, проверка сертификата, вероятно, не удалась из-за проблемы с сертификатом (срок его действия истек или имя может не соответствовать имени домена в URL-адресе).
    Если вы хотите отключить проверку сертификата с помощью curl, используйте параметр -k (или —insecure)

  4. Итак, я попробовал с -k

      curl -k https://www.example.com
      

    Но конечно выдает ошибку

    Бадаут

Я предполагаю, что делаю что-то не так с файлом сертификата, но я не знаю, где взять файл сертификата или что с ним делать, когда он у меня есть.

У меня, конечно, нет проблем со входом в систему с помощью браузера, но я хотел бы автоматизировать процесс с помощью командной строки, чтобы я мог сделать это с помощью Tasker на моем планшете Android через Wi-Fi.

7очем

15922 серебряных знака1111 бронзовых знаков

Создан 07 окт.

Джошуа РобисонДжошуа Робисон

56522 золотых знака77 серебряных знаков1717 бронзовых знаков

УСПЕХ !!

Я просмотрел бесплатный веб-сервис под названием dnsomatic (управляемый людьми из opendns)

Это так же просто, как создать учетную запись и добавить к своим услугам дополнительные возможности. Никаких дополнительных настроек.

Для пользователей Android версии busybox для wget сильно отстают и не имеют возможности использовать имена пользователей и пароли, поэтому нам придется установить и использовать cURL

Руководство по установке curl можно найти здесь

http://forum.xda-developers.com/showthread.php?t=2362386

После того, как у вас есть curl, вы можете просто обновить свой opendns ip

  curl -u opendnsusername: пароль http: //updates.dnsomatic.com / nic / update? hostname = opendnshostname
  

Создан 24 окт.

Джошуа РобисонДжошуа Робисон

56522 золотых знака77 серебряных знаков1717 бронзовых знаков

1

Суперпользователь лучше всего работает с включенным JavaScript

Ваша конфиденциальность

Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в ​​отношении файлов cookie.