Примеры использования cURL

cURL (расшифровывается как Client URL) это инструмент, позволяющий взаимодействовать с различными серверами и поддерживающий множество протоколов: HTTP, FTP, TELNET и др. Изначально cURL — это служебная программа для командной строки. PHP поддерживает работу с библиотекой cURL.

Утилита cURL установлена по умолчанию во всех современных операционных системах Windows, Mac и Linux.

cURL позволяет легко выполнять любые HTTP методы для нужного ресурса. Можно передавать любые параметры запросов и заголовков, а так же проверять ответные заголовки и данные. Инструмент командной строки «curl», стандартен для большинства *nix систем. Для пользователей Windows подойдёт MinGW/MSYS.

Пример использования и базовые опции:

# curl -X PUT www.example.com/bar/1 -d "some=var" -d "other=var2" -H "Accept: text/json" -I
  • -X [METHOD] определяет HTTP метод.
  • -d «name=value» устанавливает имя и значения переменных в POST/PUT.
  • -H [HEADER] устанавливает заголовок.
  • -I, –head отображать только заголовки ответа.
  • -k, –insecure Разрешить подключения к сайтам SSL без сертификатов. По умолчанию curl верифицирует все сертификаты и чтобы он не выдавал ошибку о неверных (самоподписанных) сертификатах и установил соединение используйте эту опцию.
  • -L, –location Следовать за перенаправлениями (редиректами)
  • –max-time (или -m) — это максимальное время в секундах, в течение которого вся операция должна быть завершена или отменена. Параметр –max-time может предотвратить зависание Curl при выполнении пакетных заданий в медленных сетях.
    curl --max-time 4 https://wiki.dieg.info
  • Какие заголовки отдает сервер? Используйте опцию -I, она позволяют получить заголовок без тела документа. Проверим HTTP ответ сайта, используя ключ I:
# 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
  • Рекурсивное отслеживание редиректов.
curl -I -L dieg.info
  • Замер скорости ответа сайта. Измерение продолжительности соединения FID (First Input Delay — Задержка первого ввода):
curl -w "%{time_total}\n" -o /dev/null -s https://dieg.info
4.561
  • Проверить работу gzip сайта при помощи curl, если включено должны увидеть заголовок content-encoding: gzip
curl -H "Accept-Encoding: gzip" -I https://wow2.top
...
content-encoding: gzip

Ключ -6 означает использовать только IPv6, ключ -4 соответственно IPv4. Если libcurl может преобразовывать адрес в несколько версий IP (что происходит, если он поддерживает IPv6), эта опция указывает libcurl разрешать имена только в адреса IPv6.

Запрос к локалхост:

curl -6 "http://[::1]/"

Рекурсивный запрос http заголовков к сайту. Ключ v позволяет в расширенном режиме убедиться, что curl использует имееyно IPv6

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)

Авторизация POST на PHP с использованием curl

Пример авторизация Метод HTTP POST на PHP с использованием curl:

<?
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;
}
?>

Функция вывод размер удаленного файла, используется библиотека PHP curl и HTTP метод запроса HEAD (параметр CURLOPT_NOBODY).

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";

Читайте также

eTalk курсы английского языка.