Php

Как включить php curl: Как включить функции для php-curl PHP Lang

Содержание

10 команд curl, которые вам следует знать — Разработка на vc.ru

Команда Mail.ru Cloud Solutions перевела статью, автор которой составил краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS. Это не замена официального руководства по cURL, скорее, краткий конспект.

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>

Игнорирование оши

cURL | Руководство по PHP

Вернуться к: cURL

Содержание

  • curl_close — Завершает сеанс cURL
  • curl_copy_handle — Копирует дескриптор cURL вместе со всеми его настройками
  • curl_errno — Возвращает код последней ошибки
  • curl_error — Возвращает строку с описанием последней ошибки текущего сеанса
  • curl_escape — URL encodes the given string
  • curl_exec — Выполняет запрос cURL
  • curl_file_create — Create a CURLFile object
  • curl_getinfo — Возвращает информацию об определенной операции
  • curl_init — Инициализирует сеанс cURL
  • curl_multi_add_handle — Добавляет обычный cURL дескриптор к набору cURL дескрипторов
  • curl_multi_close — Закрывает набор cURL дескрипторов
  • curl_multi_exec — Запускает под-соединения текущего дескриптора cURL
  • curl_multi_getcontent — Возвращает результат операции, если была установлена опция
    CURLOPT_RETURNTRANSFER
  • curl_multi_info_read — Возвращает информацию о текущих операциях
  • curl_multi_init — Создает набор cURL-дескрипторов
  • curl_multi_remove_handle — Удаляет cURL дескриптор из набора cURL дескрипторов
  • curl_multi_select — Ждет активности на любом curl_multi соединении
  • curl_multi_setopt — Set an option for the cURL multi handle
  • curl_multi_strerror — Return string describing error code
  • curl_pause — Pause and unpause a connection
  • curl_reset — Reset all options of a libcurl session handle
  • curl_setopt_array — Устанавливает несколько параметров для сеанса cURL
  • curl_setopt — Устанавливает параметр для сеанса CURL
  • curl_share_close — Close a cURL share handle
  • curl_share_init — Initialize a cURL share handle
  • curl_share_setopt — Set an option for a cURL share handle.
  • curl_strerror — Return string describing the given error code
  • curl_unescape — Decodes the given URL encoded string
  • curl_version — Возвращает версию cURL

Вернуться к: cURL

curl_setopt — Устанавливает параметр для сеанса CURL | Руководство по PHP

CURLOPT_BUFFERSIZE Размер буфера, используемого при каждом чтении. Однако, нет никакой
гарантии что данный запрос будет завершен.
Добавлен в версии cURL 7.10.
CURLOPT_CLOSEPOLICY Одна из констант CURLCLOSEPOLICY_*.

Замечание:

Эта опция устарела, так как никогда не была реализована в cURL и
не работала.

Удалена в PHP 5. 6.0.
CURLOPT_CONNECTTIMEOUT Количество секунд ожидания при попытке соединения. Используйте
0 для бесконечного ожидания.
CURLOPT_CONNECTTIMEOUT_MS Количество миллисекунд ожидания при попытке соединения. Используйте
0 для бесконечного ожидания.

Если библиотека libcurl скомпилирована с использованием стандартного системного преобразователя имен, то
соединение будет по-прежнему использовать полносекундное ожидание в качестве тайм-аута с
минимально допустимым тайм-аутом в 1 секунду.

Добавлен в версии cURL 7.16.2. Доступно, начиная с версии PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT Количество секунд, в течение которых в памяти хранятся DNS-записи.
По умолчанию этот параметр равен 120 (2 минуты).
CURLOPT_FTPSSLAUTH Метод FTP аутентификации (в активном режиме):
CURLFTPAUTH_SSL (сначала проверяется SSL),
CURLFTPAUTH_TLS (сначала проверяется TLS) или
CURLFTPAUTH_DEFAULT (cURL решает сама).
Добавлен в версии cURL 7.12.2.
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (по умолчанию,
CURL сама выбирает используемую версию),
CURL_HTTP_VERSION_1_0 (принудительное использование HTTP/1.0),
or CURL_HTTP_VERSION_1_1 (принудительное использование HTTP/1.1).
CURLOPT_HTTPAUTH

Используемые HTTP методы авторизации. Используемые параметры:
CURLAUTH_BASIC,
CURLAUTH_DIGEST,
CURLAUTH_GSSNEGOTIATE,
CURLAUTH_NTLM,
CURLAUTH_ANY, and
CURLAUTH_ANYSAFE.

Можно использовать побитовый оператор | (или)
для комбинации нескольких методов вместе. В этом случае
cURL опросит сервер на предмет поддерживаемых методов
авторизации и выберет лучший из них.

CURLAUTH_ANY — это псевдоним
CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE — это псевдоним
CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLOPT_INFILESIZE Ожидаемый размер файла, в байтах, при загрузке файла на удаленный сервер.
Учтите, что использование этой опции не остановит дальнейшую
посылку данных, превышающих это значение, так как посылаемые
данные зависят от результата
CURLOPT_READFUNCTION.
CURLOPT_LOW_SPEED_LIMIT Верхний порог скорости передачи данных, в байтах в секунду.
Проверка происходит в течение
CURLOPT_LOW_SPEED_TIME секунд, после чего
PHP считает передачу слишком медленной и прерывает ее.
CURLOPT_LOW_SPEED_TIME Максимальное количество секунд, в течение которых скорость передачи
не должна превышать CURLOPT_LOW_SPEED_LIMIT, иначе
PHP пометит передачу как слишком медленную и прекратит ее.
CURLOPT_MAXCONNECTS Максимальное количество постоянных соединений.
При достижении лимита для определения закрываемого соединения
используется параметр CURLOPT_CLOSEPOLICY.
CURLOPT_MAXREDIRS Максимальное количество принимаемых редиректов.
Используйте этот параметр вместе с параметром
CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT Альтернативный порт соединения.
CURLOPT_POSTREDIR Битовая маска, содержащая 1 (301 Moved Permanently), 2 (302 Found)
и 4 (303 See Other), чтобы задавать должен ли метод
HTTP POST обрабатываться при включенной опции
CURLOPT_FOLLOWLOCATION, если произошел
указанный тип перенаправления.
Добавлено в cURL 7.19.1. Доступно с PHP 5.3.2.
CURLOPT_PROTOCOLS

Битовая маска из значений CURLPROTO_*.
Данная маска ограничивает используемые libcurl протоколы.
Это позволяет иметь libcurl, работающую с большим количеством
протоколов, и ограничивать работу определенных передач только
для некоторого их набора. По умолчанию, libcurl использует
все поддерживаемые протоколы.
Смотрите также параметр CURLOPT_REDIR_PROTOCOLS.

Корректные значения протоколов:
CURLPROTO_HTTP,
CURLPROTO_HTTPS,
CURLPROTO_FTP,
CURLPROTO_FTPS,
CURLPROTO_SCP,
CURLPROTO_SFTP,
CURLPROTO_TELNET,
CURLPROTO_LDAP,
CURLPROTO_LDAPS,
CURLPROTO_DICT,
CURLPROTO_FILE,
CURLPROTO_TFTP,
CURLPROTO_ALL

Добавлен в версии cURL 7. 19.4.
CURLOPT_PROXYAUTH Методы авторизации HTTP, используемые при соединении с
прокси-сервером. Используйте те же самые битовые маски,
которые были описаны у параметра
CURLOPT_HTTPAUTH.
В данный момент для авторизации прокси поддерживаются только
CURLAUTH_BASIC и
CURLAUTH_NTLM.
Добавлен в версии cURL 7.10.7.
CURLOPT_PROXYPORT Номер порта прокси-сервера, к которому осуществляется
соединение. Этот номер также может быть установлен
с помощью параметра CURLOPT_PROXY.
CURLOPT_PROXYTYPE Либо CURLPROXY_HTTP (по умолчанию), либо
CURLPROXY_SOCKS5.
Добавлен в версии cURL 7.10.
CURLOPT_REDIR_PROTOCOLS Битовая маска из значений CURLPROTO_*.
Данная битовая масска ограничивает протоколы используемые
libcurl при редиректе (при включенном параметре
CURLOPT_FOLLOWLOCATION).
Это позволяет ограничить набор используемых протоколов
при редиректах для некоторых передач.
По умолчанию, libcurl поддерживает все протоколы, кроме
FILE и SCP. В версиях, предшествовавших 7.19.4,
перенаправление использовалось для всех протоколов
без исключения.
Смотрите также описание параметра
CURLOPT_PROTOCOLS для списка констант
со значениями протоколов.
Добавлен в версии cURL 7. 19.4.
CURLOPT_RESUME_FROM Смещение начала передачи, в байтах.
CURLOPT_SSL_VERIFYHOST Используйте 1 для проверки существования общего имени в сертификате
SSL. Используйте 2 для проверки существования общего
имени и также его совпадения с указанным хостом. В боевом окружении
значение этого параметра должно быть 2 (установлено по умолчанию).
Поддержка значения 1 убрана в cURL 7.28.1
CURLOPT_SSLVERSION Одна из констант CURL_SSLVERSION_DEFAULT (0),
CURL_SSLVERSION_TLSv1 (1),
CURL_SSLVERSION_SSLv2 (2),
CURL_SSLVERSION_SSLv3 (3),
CURL_SSLVERSION_TLSv1_0 (4),
CURL_SSLVERSION_TLSv1_1 (5) или
CURL_SSLVERSION_TLSv1_2 (6).

Замечание:

Рекомендуется не устанавливать эту опцию и оставить значение по умолчанию.
Установка в 2 или 3 опасно и допускает применение известных уязвимостей в SSLv2 и SSLv3.

CURLOPT_TIMECONDITION Способ трактовки параметра CURLOPT_TIMEVALUE.
Используйте CURL_TIMECOND_IFMODSINCE для
возвращения страницы, только если она была изменена со времени,
указанного в параметре CURLOPT_TIMEVALUE.
Если страница не была изменена, вернется заголовок
«304 Not Modified», подразумевая, что
параметрCURLOPT_HEADER установлен в TRUE.
Используйте CURL_TIMECOND_IFUNMODSINCE
для обратного эффекта. По умолчанию используется
CURL_TIMECOND_IFMODSINCE.
CURLOPT_TIMEOUT Максимально позволенное количество секунд для выполнения
cURL-функций.
CURLOPT_TIMEOUT_MS Максимально позволенное количество миллисекунд для выполнения
cURL-функций.

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

Добавлен в версии cURL 7. 16.2. Доступен, начиная с версии PHP 5.2.3.
CURLOPT_TIMEVALUE Количество секунд, начиная с 1 января 1970 года. Это время
будет использовано параметром
CURLOPT_TIMECONDITION. По умолчанию,
используется параметр
CURL_TIMECOND_IFMODSINCE.
CURLOPT_MAX_RECV_SPEED_LARGE Если скорость скачки превысит это значение (указанное в байтах
в секунду) в среднем в течение всей передачи, то скачка будет
приостановлена для поддержания средней скорости меньше либо равной
данному параметру. По умолчанию скорость не ограничивается.
Добавлен в версии cURL 7.15.5. Доступен, начиная с версии PHP 5.4.0.
CURLOPT_MAX_SEND_SPEED_LARGE Если загрузка на сервер превысит это значение (указанное в байтах
в секунду) в среднем в течение всей передачи, то загрузка будет
приостановлена для поддержания средней скорости меньше либо равной
данному параметру. По умолчанию скорость не ограничивается.
Добавлен в версии cURL 7.15.5. Доступен, начиная с версии PHP 5.4.0.
CURLOPT_SSH_AUTH_TYPES Битовая маска, состоящая из одной или более констант:
CURLSSH_AUTH_PUBLICKEY,
CURLSSH_AUTH_PASSWORD,
CURLSSH_AUTH_HOST,
CURLSSH_AUTH_KEYBOARD. Установите
CURLSSH_AUTH_ANY для того, чтобы libcurl выбрал одну из них самостоятельно.
Добавлено в cURL 7.16.1.
CURLOPT_IPRESOLVE Позволяет приложению выбрать вид IP адреса, с которым определяется имя хоста.
Это необходимо, если используется имя хоста, которое получается с использованием
более одной версии IP адреса. Возможными значениями могут быть
CURL_IPRESOLVE_WHATEVER,
CURL_IPRESOLVE_V4,
CURL_IPRESOLVE_V6, и по умолчанию
CURL_IPRESOLVE_WHATEVER.
Добавлено в cURL 7.10.8.

php_curl [IT-ЗАМЕТКИ]

Назад

Библиотека CURL (Client URLs) была разработана Даниелом Стенбергом (Daniel Stenberg) в 1998 году как утилита, работающая из командной строки.
Библиотека, позволяет передавать файлы на удаленный компьютер, используя множество Интернет протоколов. Она имеет очень гибкую настройку и позволяют выполнить практически любой удаленный запрос.

CURL поддерживает протоколы HTTP, HTTPS, FTP, FTPS, DICT, TELNET, LDAP, FILE, и GOPHER, так же как HTTP-post, HTTP-put, cookies, FTP-закачкe, продолжение прерванной передачи файлов, пароли, номера портов, сертификаты SSL, Kerberos и прокси.

Используя CURL, web-сервер может выступать полноценным клиентом любого основанного на HTTP протоколе сервисе, к примеру: XMLRPC, SOAP, или WebDAV.
В общем виде использование библиотеки сводиться к четырем шагам:

  • Создание ресурса CURL c помощью функции curl_init.

  • Установка параметров c помощью функции curl_setopt.

  • Выполнение запроса c помощью функции curl_exec.

  • Освобождение ресурса CURL c помощью функции curl_close.

  • CURLOPT_URLURL, с которым мы будем работать в текущем сеансе cURL можно передавать и GET.
  • CURLOPT_RETURNTRANSFER — опция позволяет настроить тип вывода ответа от сервера: выводить сразу в браузер (значение false) или же возвращать ответ (значение true) к примеру в перемену.

    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,'http://www.site.com');
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,false);
    curl_exec($curl);
    curl_close($curl);
    ------------------
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,'http://www.site.com');
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    $out = curl_exec($curl);
    echo $out;
    curl_close($curl);
  • CURLOPT_NOBODY — опция позволяет чтобы в ответ не входило содержимое самого документа.

  • CURLOPT_HEADER — опция позволяет включать в ответ от сервера его HTTP-заголовки.
  • CURLOPT_FOLLOWLOCATION — опция позволяет включать переход по редиректам.

  • CURLOPT_TIMEOUT — параметр который содержит максимальное время в секундах, которое вы отводите для работы CURL-функций.

    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,'http://myrusakov. ru');
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl,CURLOPT_NOBODY,true); // Выключить вывод содержимое сайта
держимое сайта
    curl_setopt//Включить вывод html заголовок
ключить вывод html заголов//TIMEOUT
url_setopt($curl, CURLOPT_TIMEOUT, 3);   //TIMEOUT
    //Переходим по редиректам
_FOLLOWLOCATION, true);  //Переходим по редиректа
  • CURLOPT_POST — опция включает передачу данных на сервер методом POST

  • CURLOPT_POSTFIELDS — опция содержится строку с передаваемыми данными POST запроса

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, 'http://localhost/test/test.php?s=10'); // Отправляем GET['s']
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, "a=4&b=7"); //Отправляем POST['a'] и POST['b']
    $out = curl_exec($curl);
    echo $out;
    curl_close($curl);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, 'http://localhost/test/test. php');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_COOKIE, "a=6;b=5");
    $out = curl_exec($curl);
    echo $out;
    curl_close($curl);
  • CURLOPT_REFERER Подделываем заголовок REFERER одержащий в header ($_SERVER[‘HTTP_REFERER’]).
  • CURLOPT_USERAGENT Подделываем заголовок «user-agent» содержащий в header, используемый в HTTP-запросе ($_SERVER[‘HTTP_USER_AGENT’]).
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, 'http://localhost/test/test.php');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_REFERER, "http://mysite.ru");
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0");
    $out = curl_exec($curl);
    echo $out;
    curl_close($curl);
 

Проверка сайта на доступность

       if (isDomainAvailible('http://site. com'))
       {
               echo "Домен доступен, пример работает!";
       }
       else
       {
               echo "Упс, домен не доступен.";
       }
       //возвращает true, если домен доступен, false если нет
       function isDomainAvailible($domain)
       {
               //проверка на валидность урла
               if(!filter_var($domain, FILTER_VALIDATE_URL))
               {
                       return false;
               }
               //инициализация curl
               $curlInit = curl_init($domain);
               curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
               curl_setopt($curlInit,CURLOPT_HEADER,true);
               curl_setopt($curlInit,CURLOPT_NOBODY,true);
               curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
               //получение ответа
               $response = curl_exec($curlInit);
               curl_close($curlInit);
               if ($response) return true;
               return false;
       }

Почему timeout для curl в php необходим

Использование cURL в PHP имеет свою не очень приятную особенность — обычный запрос, сделанный curl-ом, что из fpm/apache, что из cli, может привести к серьезной проблеме в работе вашего backend. Выглядит механизм возникновения проблемы, возникающей в случае, когда запрос curl-ом делается прямо из «запроса» в fpm/apache:

  1. Пул процессов php-fpm имеет ограниченное кол-во процессов
  2. Новый запрос обрабатывается свободным процессом. Если свободных процессов нет, то запрос ждет в очереди 10 секунд, если процессы не освободились, то php-fpm отдает ответ со статусом 502.
  3. Освобождаются процессы PHP-FPM:
    1. Когда завершают обработку запроса
    2. Процессы могут освобождаться принудительно, по ограничению времени max_execution_time, но это время влияет только на php-код, а не на код модулей (таких как curl)
  4. Модуль curl к php имеет баг: если тайм-аут запроса не указан явно, то по умолчанию он установлен «в бесконечность»

Имея проблему (4) + ситуацию с тем, что php не может ограничить время работы curl (3.2) и механизм работы fpm (1+2), ко всем curl-запросам необходимо установить тайм-аут запроса, иначе повисшие запросы могут занять весь пул процессов php-fpm и каждый новый запрос будет обрабатыватся с ответом 502.

В настройках curl их имеется следующие тайм-ауты:

  1. CURLOPT_CONNECTTIMEOUT — время установления tcp-соединения (не имеет смысла более 5 секунд, т.к. в условиях сети, где соединение не может открыться за 5 секунд, получить http ответ, или даже полноценно отправить запрос можно с довольно низкой вероятностью)
  2. CURLOPT_TIMEOUT — его нужно выставить в допустимое значение в секундах: это время установления соединения + время отправки запроса + время ответа до его получения. Более одной минуты в случае работы таких curl прямо из web (fpm/apache) т.к. скорее всего будет возвращен ответ 504 (nginx не получил ответ от php более, чем за минуту), а в случае запуска из cli его требуется установить в максимально допустимое.

В случае работы cli

Ситуация проще, но будет иметь свои побочные эфекты в зависимости от варианта запуска таких cli-комманд:

  • Если команда запускается с блокировкой (не более одного экземпляра запущено одновременно), то новый экземпляр не сможет запуститься до момента, пока процесс не будет убит (kill).
  • Если команда запускается по крону и без блокировки, то таких процессов наплодится много: старые процессы не завершаются, новые порождаются: это займет ram, упрется в ограничение по количеству подключений к базе данных, если они имеются.

P.S.

Архитектурно некорректно использовать curl прямо из web (fpm/apache), т.к. это устанавливает прямую связку между запросом пользователя из браузера + процессом + запросом с помощью curl вовне. Каждый из этих запросов имеет свои ограничения по тайм-аутам и эта конструкция может существовать стабильно только в идельных условиях (RAM на процессы никогда не закончится + сеть между сервером и клиентом идеальна + запрос curl обрабатывается очень быстро + curl всегда надежно получает ответы).

P.S.2.

Абсолютно так же некорректно делать такие запросы не только из php с использованием fpm/apache, но и других языков и серверов, в т.ч. nodejs/erlang/go и других — асинхронность экономит RAM, но не повышает условий сети, которые, к сожалению, реальны и не идеальны.

 

Как установить заголовок авторизации с помощью curl

см. раздел 6. Аутентификация HTTP

аутентификация HTTP

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

чтобы сказать curl использовать пользователя и пароль для аутентификации:

curl --user name:password http://www.example.com

сайту может потребоваться другой метод аутентификации (проверьте заголовки
возвращается сервером), а затем —ntlm, —digest, —negotiate или даже
— anyauth может быть варианты, которые подходят вам.

Иногда ваш HTTP-доступ доступен только через использование HTTP
полномочие. Это, по-видимому, особенно распространено в различных компаниях. Прокси HTTP
может потребоваться собственный пользователь и пароль, чтобы позволить клиенту
интернет. Чтобы указать те, с завитком, запустите что-то вроде:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

Если прокси-сервер требует проверки подлинности с помощью метода NTLM,
используйте —proxy-ntlm, если это требует использования дайджеста —proxy-digest.

Если вы используете любой из этих параметров user + password, но оставляете пароль
часть, curl запросит пароль в интерактивном режиме.

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

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

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

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

Он поддерживает множество протоколов «из коробки», включая HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3 и многие другие.

Когда дело доходит до отладки сетевых запросов, curl — один из лучших инструментов, которые вы можете найти.

Это один из тех инструментов, к которому, как только знаешь, как пользоваться, всегда возвращаешься. Лучший друг программиста.

Универсальный, работает на Linux, Mac, Windows.Обратитесь к официальному руководству по установке, чтобы установить его в вашей системе.

Интересный факт: автор и сопровождающий curl на шведском языке был награжден королем Швеции за вклад, который его работа (curl и libcurl) внесла в компьютерный мир.

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

Эти примеры касаются работы с HTTP, наиболее популярным протоколом.

Выполнить HTTP-запрос GET

Когда вы выполняете запрос, curl вернет тело ответа:

  curl https: // flaviocopes.com /  

Получить заголовки ответа HTTP

По умолчанию заголовки ответа скрыты в выводе curl. Чтобы показать их, используйте опцию i :

  curl -i https://flaviocopes.com/  

Получить только заголовки ответа HTTP

Используя опцию I , вы можете получить только заголовки, а не тело ответа:

  завиток -I https://flaviocopes.com/  

Выполнить запрос HTTP POST

Параметр X позволяет изменить используемый метод HTTP. По умолчанию используется GET, аналогично записи

.

  curl -X ПОЛУЧИТЬ https://flaviocopes.com/  

Использование -X POST выполнит запрос POST.

Вы можете выполнить запрос POST с передачей данных в кодировке URL:

  curl -d "option = value & something = anothervalue" -X POST https://flaviocopes.com/  

В этом случае отправляется application / x-www-form-urlencoded Content-Type.

Выполнить запрос HTTP POST, отправив JSON

Вместо публикации данных в кодировке URL, как в приведенном выше примере, вы можете отправить JSON.

В этом случае вам необходимо явно установить заголовок Content-Type, используя опцию H :

  curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application / json" -X POST https://flaviocopes.com/  

Вы также можете отправить файл JSON со своего диска:

  curl -d "@ my-file. json" -X POST https://flaviocopes.com/  

Выполнить запрос HTTP PUT

Концепция такая же, как и для запросов POST, просто измените метод HTTP с помощью -X PUT

Перейти на перенаправление

За ответом перенаправления, например 301, который указывает заголовок ответа Location , можно автоматически указать параметр L :

  curl http: // flaviocopes.com /  

не будет автоматически следовать за версией HTTPS, на которую я настроил перенаправление, но это будет:

  локон -L http://flaviocopes.com/  

Сохранить ответ на файл

Используя опцию o , вы можете указать curl сохранять ответ в файл:

  curl -o file.html https://flaviocopes.com/  

Вы также можете просто сохранить файл по его имени на сервере, используя опцию O :

  curl -O https: // flaviocopes. ru / index.html  

Использование HTTP-аутентификации

Если для ресурса требуется базовая HTTP-аутентификация, вы можете использовать опцию и для передачи значений user: password:

  curl -u пользователь: пройти https://flaviocopes.com/  

Установить другой пользовательский агент

Пользовательский агент сообщает серверу, какой клиент выполняет запрос. По умолчанию curl отправляет пользовательский агент curl / , например: curl / 7.54.0 .

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

  curl --user-agent "my-user-agent" https://flaviocopes.com  

Проверка всех деталей запроса и ответа

Используйте опцию --verbose , чтобы curl выводил все детали запроса и ответа:

  curl --verbose -I https://flaviocopes. com/  
  * Пробуем 178.128.202.129...
* TCP_NODELAY установлен
* Подключен к flaviocopes.com (178.128.202.129) порт 443 (# 0)
* Подключение TLS 1.2 с использованием TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Сертификат сервера: flaviocopes.com
* Сертификат сервера: Let's Encrypt Authority X3
* Сертификат сервера: DST Root CA X3
> HEAD / HTTP / 1.1
> Хост: flaviocopes.com
> Пользовательский агент: curl / 7.54.0
> Принять: * / *
>
 

Копирование любого сетевого запроса браузера в команду curl

При проверке любого сетевого запроса с помощью инструментов разработчика Chrome у вас есть возможность скопировать этот запрос в запрос curl:

  curl 'https://github.com/curl/curl' -H 'Соединение: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade- Небезопасные запросы: 1 '-H' DNT: 1 '-H' Агент пользователя: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 67.0.3396.99 Safari / 537.36 '-H' Принять: текст / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / * ; q = 0.8 '-H' Referer: https://www.google.it/ '-H' Accept-Encoding: gzip, deflate, br '-H' Accept-Language: en-US, en; q = 0.9 , it; q = 0.8 '-H' Cookie: _octo = Gh2.1.933116459.1507545550; _ga = GA1.2.643383860.1507545550; tz = Европа% 2FRome; user_session = XXXXX; __Host-user_session_same_site = ГГГГГГ; dotcom_user = flaviocopes; logged_in = да; has_recent_activity = 1; _gh_sess = ZZZZZZ '- сжатый  

curl - Урок

Простое использование

Получить главную страницу с веб-сервера:

  curl https: // www.example.com/
  

Получите файл README из домашнего каталога пользователя на ftp-сервере funet:

  curl ftp://ftp.funet.fi/README
  

Получить веб-страницу с сервера через порт 8000:

  завиток http://www.weirdserver.com:8000/
  

Получить список каталогов FTP-сайта:

  curl ftp://ftp.funet.fi
  

Найдите определение слова curl из словаря:

  завиток dict: //dict.org/m: завиток
  

Получить два документа одновременно:

  curl ftp: // ftp.funet.fi/ http://www.weirdserver.com:8000/
  

Получить файл с сервера FTPS:

  curl ftps: //files.are.secure.com/secrets.txt
  

или используйте более подходящий способ FTPS для получения того же файла:

  curl --ftp-ssl ftp://files.are.secure.com/secrets.txt
  

Получить файл с SSH-сервера с помощью SFTP:

  curl -u имя пользователя sftp: //example.com/etc/issue
  

Получить файл с SSH-сервера, используя SCP, используя закрытый ключ (не
защищен паролем) для аутентификации:

  curl -u имя пользователя: --key ~ /.ssh / id_rsa scp: //example.com/~/file.txt
  

Получить файл с SSH-сервера, используя SCP, используя закрытый ключ
(защищен паролем) для аутентификации:

  curl -u имя пользователя: --key ~ / .ssh / id_rsa --pass private_key_password
scp: //example.com/~/file.txt
  

Получить главную страницу с веб-сервера IPv6:

  curl "http: // [2001: 1890: 1112: 1 :: 20] /"
  

Получить файл с SMB-сервера:

  curl -u "домен \ имя пользователя: пароль" smb: // сервер.example.com/share/file.txt
  

Скачать в файл

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

  curl -o thatpage.html http://www.example.com/
  

Получить веб-страницу и сохранить в локальном файле, сделать так, чтобы локальный файл получил имя
удаленный документ (если в URL-адресе не указана часть имени файла, это будет
не удалось):

  curl -O http://www.example.com/index.html
  

Получить два файла и сохранить их с удаленными именами:

  curl -O www.haxx.se/index.html -O curl.se/download.html
  

Использование паролей

FTP

Для ftp-файлов, используя имя + пароль, включите их в URL-адрес, например:

  curl ftp: // имя: [email protected]: порт / полный / путь / к / файлу
  

или укажите их с помощью флага -u, например

  curl -u имя: passwd ftp: //machine.domain: порт / полный / путь / к / файлу
  

FTPS

Это похоже на FTP, но вы также можете указать и использовать специфичный для SSL
варианты сертификатов и др.

Обратите внимание, что использование префикса FTPS: // является «неявным» способом, как описано в
стандартов, в то время как рекомендуемый «явный» способ выполняется с использованием FTP: // и
--ftp-ssl опция.

SFTP / SCP

Это похоже на FTP, но вы можете использовать опцию --key , чтобы указать
закрытый ключ для использования вместо пароля. Обратите внимание, что закрытый ключ может сам
быть защищенным паролем, который не связан с паролем входа в
удаленная система; этот пароль задается с помощью опции --pass .Обычно curl автоматически извлекает открытый ключ из закрытого.
файл, но в тех случаях, когда curl не имеет надлежащей поддержки библиотеки,
соответствующий файл открытого ключа должен быть указан с помощью параметра --pubkey .

HTTP

Curl также поддерживает имя пользователя и пароль в URL-адресах HTTP, поэтому вы можете выбрать файл
нравится:

  curl http: // имя: [email protected]/full/path/to/file
  

или указать пользователя и пароль отдельно, как в

  curl -u имя: passwd http: // machine.домен / полный / путь / к / файлу
  

HTTP предлагает множество различных методов аутентификации и поддерживает curl.
несколько: базовый, дайджест, NTLM и согласование (SPNEGO). Не говоря уже о том, какой
по умолчанию используется метод curl. Вы также можете попросить curl выбрать наиболее
безопасные из тех, которые сервер принимает для данного URL, путем
используя --anyauth .

Примечание ! Согласно спецификации URL, URL-адреса HTTP не могут содержать пользователя
и пароль, поэтому этот стиль не будет работать при использовании curl через прокси, даже
хотя curl позволяет это в другое время.При использовании прокси вы должны использовать
-u стиль для пользователя и пароля.

HTTPS

Вероятно, наиболее часто используется с частными сертификатами, как описано ниже.

Прокси

curl поддерживает прокси-серверы HTTP и SOCKS с дополнительной аутентификацией.
Он не имеет специальной поддержки для FTP-прокси-серверов, так как нет
стандарты для них, но его все еще можно заставить работать со многими из них. Вы
также может использовать прокси HTTP и SOCKS для передачи файлов на FTP и обратно
серверы.

Получите ftp-файл с помощью HTTP-прокси с именем my-proxy, который использует порт 888:

  curl -x my-proxy: 888 ftp://ftp.leachsite.com/README
  

Получите файл с HTTP-сервера, который требует имени пользователя и пароля, используя
тот же прокси, что и выше:

  curl -u пользователь: passwd -x my-proxy: 888 http: //www.get.this/
  

Некоторые прокси требуют специальной аутентификации. Укажите с помощью -U, как указано выше:

  curl -U пользователь: passwd -x my-proxy: 888 http: // www.взять это/
  

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

  curl --noproxy localhost, get.this -x my-proxy: 888 http: //www.get.this/
  

Если прокси указан с --proxy1.0 вместо --proxy или -x , то
curl будет использовать HTTP / 1.0 вместо HTTP / 1.1 для любых попыток CONNECT .

curl также поддерживает прокси SOCKS4 и SOCKS5 с --socks4 и --socks5 .

См. Также переменные среды, которые поддерживает Curl, которые предлагают дополнительные прокси.
контроль.

Большинство прокси-серверов FTP настроены так, чтобы отображаться как обычный FTP-сервер с
с точки зрения клиента, со специальными командами для выбора удаленного FTP-сервера.
curl поддерживает параметры -u , -Q и --ftp-account , которые можно использовать для
настроить передачи через множество FTP-прокси. Например, файл можно загрузить
на удаленный FTP-сервер с помощью FTP-прокси Blue Coat с параметрами:

  curl -u "имя пользователя @ ftp.Имя пользователя-прокси-сервера: Remote-Pass "
  --ftp-account Proxy-Password --upload-file local-file
  ftp: //my-ftp.proxy.server: 21 / удаленный / загрузка / путь /
  

См. Руководство для вашего FTP-прокси, чтобы определить форму, которую он ожидает настроить.
передачи и параметр curl -v , чтобы точно узнать, что отправляет curl.

Диапазоны

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

Получить первые 100 байт документа:

  curl -r 0-99 http: //www.get.this/
  

Получить последние 500 байт документа:

  curl -r -500 http: //www.get.this/
  

Curl также поддерживает простые диапазоны для файлов FTP. Тогда ты можешь только
укажите начальную и конечную позицию.

Получить первые 100 байт документа с помощью FTP:

  curl -r 0-99 ftp: //www.get.this/README
  

Загрузка

FTP / FTPS / SFTP / SCP

Загрузить все данные со стандартного ввода на указанный сервер:

  curl -T - ftp: // ftp.upload.com/myfile
  

Загрузить данные из указанного файла, логин с пользователем и паролем:

  curl -T uploadfile -u пользователь: passwd ftp://ftp.upload.com/myfile
  

Загрузите локальный файл на удаленный сайт и используйте имя локального файла в
удаленный сайт тоже:

  curl -T uploadfile -u пользователь: passwd ftp://ftp.upload.com/
  

Загрузите локальный файл для добавления к удаленному файлу:

  curl -T localfile -a ftp: // ftp.upload.com/remotefile
  

Curl также поддерживает загрузку ftp через прокси, но только если прокси
настроен для разрешения такого типа туннелирования. Если это так, вы можете запустить curl в
мода похожа на:

  curl --proxytunnel -x прокси: порт -T локальный файл ftp.upload.com
  

SMB / SMBS

  curl -T file.txt -u "домен \ имя пользователя: пароль"
  smb: //server.example.com/share/
  

HTTP

Загрузить все данные со стандартного ввода на указанный HTTP-сайт:

  curl -T - http: // www.upload.com/myfile
  

Обратите внимание, что HTTP-сервер должен быть настроен на прием PUT до этого.
можно сделать успешно.

Чтобы узнать о других способах загрузки данных HTTP, см. Раздел POST ниже.

Подробная информация / Отладка

Если curl не работает там, где этого не должно быть, если серверы не пропускают вас, если
вы не можете понять ответы: используйте флаг -v , чтобы получить подробный ответ
получение. Curl будет выводить много информации и то, что он отправляет и получает в
чтобы позволить пользователю видеть все взаимодействия клиент-сервер (но он не покажет вам
фактические данные).

  curl -v ftp://ftp.upload.com/
  

Чтобы получить более подробную информацию и информацию о том, что делает curl, попробуйте использовать
--trace или --trace-ascii параметры с заданным именем файла для входа, например
это:

  curl --trace trace.txt www.haxx.se
  

Подробная информация

Различные протоколы предоставляют разные способы получения подробной информации
о конкретных файлах / документах. Чтобы завиток отображал подробную информацию о
один файл, вы должны использовать опцию -I / --head .Он отображает все доступные
информация об одном файле для HTTP и FTP. Информация HTTP - это намного больше
обширный.

Для HTTP вы можете получить информацию заголовка (то же, что и -I )
показано перед данными с использованием -i / --include . Curl понимает
-D / --dump-header параметр при получении файлов как с FTP, так и с HTTP, и это
затем сохранит заголовки в указанном файле.

Храните заголовки HTTP в отдельном файле (headers.txt в примере):

  curl --dump-header headers.txt curl.se
  

Обратите внимание, что заголовки, хранящиеся в отдельном файле, могут быть очень полезны в более позднее время.
если вы хотите, чтобы curl использовал файлы cookie, отправленные сервером. Подробнее об этом в
раздел куки.

POST (HTTP)

С помощью curl легко публиковать данные. Это делается с помощью опции -d <данные> .
Данные сообщения должны быть закодированы.

Разместите простую гостевую книгу «имя» и «телефон».

  curl -d "name = Rafael% 20Sagula & phone = 3320780" http://www.where.com/guest.cgi
  

Как разместить форму с помощью curl, урок №1:

Выкопайте все теги в форме, которую вы хотите заполнить.

Если есть "нормальный" пост, для поста используйте -d . -d занимает полный пост
строка », имеющая формат

  <переменная1> = <данные1> & <переменная2> = <данные2> &...
  

Имена 'переменных' - это имена, заданные с помощью "name =" в тегах ,
а данные - это содержимое, которое вы хотите заполнить для входных данных. Данные
должен быть правильно закодирован для URL. Это означает, что вы заменяете пробел на + и что
вы заменяете странные буквы на% XX, где XX - шестнадцатеричное представление
кода ASCII письма.

Пример:

(страница расположена по адресу http://www.formpost.com/getthis/ )

  
<имя входа = тип передачи = размер пароля = 10>

Мы хотим войти в пользователя foobar с паролем 12345.

Чтобы опубликовать в это сообщение, введите команду curl, например:

  curl -d "user = foobar & pass = 12345 & id = blablabla & ding = submit"
  http://www.formpost.com/getthis/post.cgi
  

Хотя -d использует mime-тип application / x-www-form-urlencoded, обычно
понимаемый CGI и им подобными, curl также поддерживает более способные
multipart / form-data тип.Последний тип поддерживает такие вещи, как загрузка файлов.

-F принимает такие параметры, как -F "name = contents" . Если вы хотите, чтобы содержимое
быть прочитанным из файла, используйте @filename в качестве содержимого. При указании файла вы
также можно указать тип содержимого файла, добавив ; type = к
имя файла. Вы также можете разместить содержимое нескольких файлов в одном поле. За
Например, имя поля "coolfiles" используется для отправки трех файлов с
различные типы контента, используя следующий синтаксис:

  curl -F "coolfiles = @ fil1.gif; type = image / gif, fil2.txt, fil3.html "
  http://www.post.com/postit.cgi
  

Если тип содержимого не указан, curl попытается угадать из файла
расширение (знает только несколько) или использовать ранее указанный тип (из
более ранний файл, если в списке указано несколько файлов), иначе он будет использовать
тип по умолчанию 'application / octet-stream'.

Эмуляция формы заполнения с помощью -F . Допустим, вы заполнили три поля в
форма. Одно поле - это имя файла для публикации, одно поле - ваше имя, второе -
поле - описание файла.Мы хотим опубликовать написанный нами файл с именем
"cooltext.txt". Чтобы позволить curl публиковать эти данные вместо ваших
любимый браузер, вы должны прочитать исходный HTML-код страницы формы и найти
имя

cURL: Добавить заголовок, несколько заголовков, авторизация

curl позволяет добавлять дополнительные заголовки к HTTP-запросам.

Заголовки HTTP используются для передачи дополнительной информации между клиентом и сервером.

В этой статье я показываю примеры того, как добавить заголовок в curl , как добавить несколько заголовков и как установить заголовок авторизации из командной строки Linux.

Дельный Совет: Установите User-Agent в HTTP-заголовок с помощью cURL! Узнать больше →

Добавить заголовок в cURL

Добавить заголовок X-Forwarded-For :

$ curl -H "X-Forwarded-For: 192.168.0.1" http://example.com
 

Установить заголовок Принять: application / xml и ПОЛУЧИТЬ данные с сервера:

$ curl -H "Принять: application / xml" -X GET www.example.com
 

Установить заголовок Content-Type: application / json и отправить данные через POST запрос :

$ curl -H "Content-Type: application / json" \
       -X POST \
       -d '{"ключ1": "значение1", "ключ2": "значение2"}' \
       http: // пример.com
 

POST данные из файла data.json :

$ curl -H "Content-Type: application / json" \
       -X POST \
       -d @ data.json \
       http://example.com
 

Пример содержимого файла data.json :

$ cat data.json
{
  "ключ1": "значение1",
  "ключ2": "значение2"
}
 

Установить заголовок авторизации в cURL

Базовая аутентификация с использованием имени пользователя и пароля :

$ curl --user <ПОЛЬЗОВАТЕЛЬ>: <ПАРОЛЬ> http: // www.example.com
 

Установить заголовок с токеном аутентификации Basic :

$ curl -H "Авторизация: базовая " http://www.example.com
 

Чтобы сгенерировать токен базовой аутентификации, выполните:

$ echo -ne "<ПОЛЬЗОВАТЕЛЬ>: <ПАРОЛЬ>" | base64 - обернуть 0
 

Установить заголовок с помощью токена аутентификации носителя :

$ curl -H "Авторизация: предъявитель " http: // www.example.com
 

Установить заголовок с токеном аутентификации OAuth :

$ curl -H "Авторизация: OAuth " http://www.example.com
 

Установить имя пользователя и пароль для прокси :

$ curl --proxy-user :  http://www.example.com
 

Если прокси требует аутентификации с использованием метода NTLM, добавьте опцию --proxy-ntlm , если требуется дайджест, добавьте --proxy-digest .

Добавить заголовок с API-ключом :

$ curl -H ": " http://www.example.com
 

Установить несколько заголовков в cURL

Добавить несколько заголовков:

$ curl -H "Accept-Charset: utf-8" \
       -H "Content-Type: application / x-www-form-urlencoded" \
       -H "Соединение: keep-alive"
       http://example.com
 

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2021 © Все права защищены. Карта сайта