Как включить 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
CURLOPT_BUFFERSIZE | Размер буфера, используемого при каждом чтении. Однако, нет никакой гарантии что данный запрос будет завершен. | Добавлен в версии cURL 7.10. |
CURLOPT_CLOSEPOLICY | Одна из констант CURLCLOSEPOLICY_* .
| Удалена в PHP 5. 6.0. |
CURLOPT_CONNECTTIMEOUT | Количество секунд ожидания при попытке соединения. Используйте 0 для бесконечного ожидания. | |
CURLOPT_CONNECTTIMEOUT_MS | Количество миллисекунд ожидания при попытке соединения. Используйте 0 для бесконечного ожидания. Если библиотека libcurl скомпилирована с использованием стандартного системного преобразователя имен, то | Добавлен в версии 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 методы авторизации. Используемые параметры: Можно использовать побитовый оператор | (или) | |
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 | Битовая маска из значений Корректные значения протоколов: | Добавлен в версии 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).
| |
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 протоколе сервисе, к примеру: XML—RPC, SOAP, или WebDAV.
В общем виде использование библиотеки сводиться к четырем шагам:
Создание ресурса CURL c помощью функции curl_init.
Установка параметров c помощью функции curl_setopt.
Выполнение запроса c помощью функции curl_exec.
Освобождение ресурса CURL c помощью функции curl_close.
- CURLOPT_URL — URL, с которым мы будем работать в текущем сеансе 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:
- Пул процессов php-fpm имеет ограниченное кол-во процессов
- Новый запрос обрабатывается свободным процессом. Если свободных процессов нет, то запрос ждет в очереди 10 секунд, если процессы не освободились, то php-fpm отдает ответ со статусом 502.
- Освобождаются процессы PHP-FPM:
- Когда завершают обработку запроса
- Процессы могут освобождаться принудительно, по ограничению времени max_execution_time, но это время влияет только на php-код, а не на код модулей (таких как curl)
- Модуль curl к php имеет баг: если тайм-аут запроса не указан явно, то по умолчанию он установлен «в бесконечность»
Имея проблему (4) + ситуацию с тем, что php не может ограничить время работы curl (3.2) и механизм работы fpm (1+2), ко всем curl-запросам необходимо установить тайм-аут запроса, иначе повисшие запросы могут занять весь пул процессов php-fpm и каждый новый запрос будет обрабатыватся с ответом 502.
В настройках curl их имеется следующие тайм-ауты:
- CURLOPT_CONNECTTIMEOUT — время установления tcp-соединения (не имеет смысла более 5 секунд, т.к. в условиях сети, где соединение не может открыться за 5 секунд, получить http ответ, или даже полноценно отправить запрос можно с довольно низкой вероятностью)
- 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/
)
Мы хотим войти в пользователя 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
.