Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
curl [2023/06/09 16:51] (текущий) – [Краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS] darkfire
Строка 1: Строка 1:
 +====== Примеры использования cURL ======
  
 +~~Title: cURL тестирование HTTP заголовков, SOCKS и другие  ~~
 +{{htmlmetatags>
 +metatag-description=()
 +}}
 +
 +cURL (расшифровывается как Client URL) это инструмент, позволяющий взаимодействовать с различными серверами и поддерживающий множество протоколов: HTTP, FTP, TELNET и др. Изначально cURL — это служебная программа для командной строки. PHP поддерживает работу с библиотекой cURL.
 +
 +Утилита cURL установлена по умолчанию во всех современных операционных системах Windows, Mac и Linux.
 +
 +  * [[https://docs.guzzlephp.org/en/stable/|Guzzle]] PHP HTTP клиент, обертка над cURL.
 +  * [[socks#proverka_podkljuchenija_cherez_dante|cURL пример проверки подключения SOCKS 5]]
 +
 +===== Тестирование HTTP / HTTPS при помощи cURL или rest-client =====
 +cURL позволяет легко выполнять любые [[http|HTTP методы]] для нужного ресурса. Можно передавать любые параметры запросов и заголовков, а так же проверять ответные заголовки и данные. Инструмент командной строки «curl», стандартен для большинства *nix систем. Для пользователей Windows подойдёт MinGW/MSYS.
 +
 +Пример использования и базовые опции:
 +
 +<file bash>
 +# curl -X PUT www.example.com/bar/1 -d "some=var" -d "other=var2" -H "Accept: text/json" -I
 +</file>
 +
 +  * -X [METHOD] определяет HTTP метод.
 +  * -d «name=value» устанавливает имя и значения переменных в POST/PUT.
 +  * -H [HEADER] устанавливает заголовок.
 +  *  **-I, --head** отображать только заголовки ответа.
 +  *  **-k, --insecure** Разрешить подключения к сайтам SSL без сертификатов. По умолчанию curl верифицирует все сертификаты  и чтобы он не выдавал ошибку о неверных (самоподписанных) сертификатах и установил соединение используйте эту опцию.
 +  *  **-L, --location** Следовать за перенаправлениями (редиректами)
 +  * **--max-time (или -m)** — это максимальное время в секундах, в течение которого вся операция должна быть завершена или отменена. Параметр --max-time может предотвратить зависание Curl при выполнении пакетных заданий в медленных сетях. <file>
 +curl --max-time 4 https://wiki.dieg.info
 +</file>
 +==== Краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS ====
 +  * **Какие заголовки отдает сервер?** Используйте опцию -I, она позволяют получить заголовок без тела документа. Проверим HTTP ответ сайта, используя ключ I:
 +<file bash>
 +# curl -I dieg.info
 +HTTP/1.1 301 Moved Permanently
 +Date: Sat, 23 Apr 2022 07:04:04 GMT
 +Server: Apache
 +Location: https://dieg.info/
 +Cache-Control: max-age=600
 +Expires: Sat, 23 Apr 2022 07:14:04 GMT
 +Content-Type: text/html; charset=iso-8859-1
 +</file>
 +  * **Рекурсивное отслеживание редиректов**.
 +<file bash>
 +curl -I -L dieg.info
 +</file>
 +  * **Замер скорости ответа сайта.** Измерение продолжительности соединения [[https://wow2.top/kak-izmerit-skorost-zagruzki-sayta/|FID]] (First Input Delay — Задержка первого ввода):
 +<file bash>
 +curl -w "%{time_total}\n" -o /dev/null -s https://dieg.info
 +4.561
 +</file>
 +  * Проверить работу gzip сайта при помощи curl, если включено должны увидеть заголовок content-encoding: gzip
 +<file bash>
 +curl -H "Accept-Encoding: gzip" -I https://wow2.top
 +...
 +content-encoding: gzip
 +</file>
 +  * Если у вас несколько ip на сервере и вы хотите сделать запрос с конкретного вашего ip - используйте ключ interface: 
 +<file bash>
 +curl --interface 193.233.203.51 ipinfo.io/ip
 +</file>
 +==== Использование cURL с IPv6 ====
 +Ключ -6 означает использовать только [[IPv6|IPv6]], ключ -4 соответственно IPv4. Если libcurl может преобразовывать адрес в несколько версий IP (что происходит, если он поддерживает IPv6), эта опция указывает libcurl разрешать имена только в адреса IPv6.
 +
 +Запрос к локалхост:
 +<file bash>
 +curl -6 "http://[::1]/"
 +</file>
 +Рекурсивный запрос http заголовков к сайту. Ключ v позволяет в расширенном режиме убедиться, что curl использует имееyно IPv6
 +<file bash>
 +curl -v -6 --max-time 7 -IL https://wow2.top
 +
 +* Trying 2001:678:6d4:9203::15:443...
 +* Connected to wow2.top (2001:678:6d4:9203::15) port 443 (#0)
 +</file>
 +===== Авторизация POST на PHP с использованием curl =====
 +Пример авторизация [[POST]] на [[PHP]] с использованием curl:
 +
 +<file php>
 +<?
 +function login($url,$login,$pass){
 +   $ch = curl_init();
 +   if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https
 +    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
 +    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
 +   }
 +   curl_setopt($ch, CURLOPT_URL, $url);
 +   // откуда пришли на эту страницу
 +   curl_setopt($ch, CURLOPT_REFERER, $url);
 +   // cURL будет выводить подробные сообщения о всех производимых действиях
 +   curl_setopt($ch, CURLOPT_VERBOSE, 1);
 +   curl_setopt($ch, CURLOPT_POST, 1);
 +   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 +   curl_setopt($ch, CURLOPT_POSTFIELDS,"login=".$login."&pass=".$pass);
 +   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
 +   curl_setopt($ch, CURLOPT_HEADER, 1);
 +   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 +   //сохранять полученные COOKIE в файл
 +   curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
 +   $result=curl_exec($ch);
 +
 +   // Убеждаемся что произошло перенаправление после авторизации
 +   if(strpos($result,"Location: home.php")===false) die('Login incorrect');
 +
 +   curl_close($ch);
 +
 +   return $result;
 +}
 +
 +// чтение страницы после авторизации
 +function Read($url){
 +   $ch = curl_init();
 +   curl_setopt($ch, CURLOPT_URL, $url);
 +   // откуда пришли на эту страницу
 +   curl_setopt($ch, CURLOPT_REFERER, $url);
 +   //запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET
 +   curl_setopt($ch, CURLOPT_POST, 0);
 +   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 +   //отсылаем серверу COOKIE полученные от него при авторизации
 +   curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
 +   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
 +
 +   $result = curl_exec($ch);
 +
 +   curl_close($ch);
 +
 +   return $result;
 +}
 +?>
 +</file>
 +===== PHP: удаленный размер файла без загрузки файла =====
 +
 +Функция вывод размер удаленного файла, используется библиотека PHP curl и HTTP метод запроса HEAD (параметр CURLOPT_NOBODY).
 +<file php>
 +function getRemoteFilesize($url){
 +     $ch = curl_init($url);
 +
 +     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 +     curl_setopt($ch, CURLOPT_HEADER, TRUE);
 +     curl_setopt($ch, CURLOPT_NOBODY, TRUE);
 +
 +     $data = curl_exec($ch);
 +     $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
 +
 +     curl_close($ch);
 +     return $size;
 +}
 +
 +$url = 'https://example.com/file.csv';
 +echo getRemoteFilesize($url);
 +echo "\n";
 +</file>
 +
 +<panel type="primary" title="Читайте также">
 +  * [[chrome#ruchnoe_redaktirovanie_zakladokskript_php_statusa_zakladok_brauzera|Ручное редактирование закладок Google Chrome]] с использованием cURL.
 +</panel>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!