cURL запросы в php

cURL — очень мощный инструмент, который позволяет передавать данные с помощью различных протоколов. Очень часто его используют для передачи данных между веб-сайтами. Как пример таких запросов можно привести взаимодействие с API или oAuth.
сURL безграничен в своих возможностях, начиная от базовых HTTP запросов, продолжая передачей данных через протокол FTP и т.д. Список протоколов, с которыми работает cURL: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP.

В этой статье мы рассмотрим разницу между передачей запроса методом GET и POST, разберем как работать с ответом и рассмотрим несколько частно используемых параметров

Основы

Перед тем, как отправить cURL запрос — нам следует создать сеанс. Сделать это можно при помощи функции curl_init( $url );
Данная функция принимает один параметр — url, который будет загружен. Но url можно будет установить позже, по этому данный параметр не обязателен.

$curl = curl_init();

Настройки

Параметры cURL нужны для того, чтобы более точно сконфигурировать Ваш запрос. С помощью параметров можно получить те самые, почти безграничные, возможности работы с запросами.

После того, как ресурс создан, можно приступить к настройке параметров запроса. Для этого мы можем пользоваться функцией curl_setopt ( $ch , $option , $value ), которая принимает три обязательных параметра:

  1. $ch — ссылка на ресурс cURL
  2. Параметр, который мы устанавливаем
  3. Значение параметра

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

ПараметрОписание
CURLOPT_RETURNTRANSFERВозвращает ответ как строку (если передать true), вместо вывода на экран
CURLOPT_CONNECTTIMEOUTПозволяет задать количество секунд для ожидания соединения.
CURLOPT_TIMEOUTЗадает количество секунд, которые будет выполняться запрос.
CURLOPT_USERAGENTСодержимое заголовка «User-Agent: «, посылаемого в HTTP-запросе.
CURLOPT_URLURL, куда будет отправлен запрос.
CURLOPT_POSTtrue, если нужно отправить POST запрос
CURLOPT_POSTFIELDSМассив параметров для POST запроса

Как задавать параметры

Как описывалось выше, параметры можно задавать при помощи метода curl_setopt. Давайте разберем несколько примеров:

Пример 1: Установим значение URL, куда будет отправлен запрос:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://testcURL.com');

К слову, установить этот параметр можно в одну строку при инициализации ресурса:

$curl = curl_init('http://testcURL.com');

Пример 2: Установим время выполнения запроса в 10 секунд:

$curl = curl_init();
curl_setopt($curl, CURLOPT_TIMEOUT, 10);

Альтернативный способ задавать настройки

Настройки можно задать при помощи функции curl_setopt_array($ch, $array), первый параметр которой — ссылка на ресурс cURL, второй — ассоциативный массив, где ключами выступают константы параметров.

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://testcURL.com'
));

Отправка запроса cURL

Как написано выше, при помощи cURL можно отправлять различные запросы. В данной статье мы рассмотрим варианты отправки GET и POST запросов.

Отправить GET запрос

GET запрос используется по умолчанию. Как вы увидите в примере ниже, он достаточно прост для понимания.

Если есть необходимость использовать параметры, их можно просто перечислить в url: http://testsite.com/?param=value&param2=value2

Отправим простой GET запрос с параметрами:

// Инициализация ресурса curl
$curl = curl_init();
// Параметры отправки запроса (мы добавили useragent)
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://testsite.com/?param=value&param2=value2',
    CURLOPT_USERAGENT => 'ctrlv cURL Request'
));
// Отправка запроса; ответ будет в $response
$response = curl_exec($curl);
// Завершение работы с cURL
curl_close($curl);

Отправка POST запроса

Синтаксис для GET и POST запросов немного отличается. В случае, если запрос не содержит параметров, разница будет только в параметре CURLOPT_POST (в POST этот параметр устанавливаем в true или 1). Если необходимо передавать параметры POST запроса, дополнительно указываем параметр CURLOPT_POSTFIELDS (массив, где название параметра — ключ массив).

В данном примере отправляется тот-же запрос, который рассматривался в выше, отличается лишь метод отправки.

// Инициализация ресурса curl
$curl = curl_init();
// Параметры отправки запроса (мы добавили useragent)
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://testsite.com',
    CURLOPT_USERAGENT => 'ctrlv cURL Request',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => array(
        param => 'value',
        param22 => 'value2'
    )
));
// Отправка запроса; ответ будет в $response
$response = curl_exec($curl);
// Завершение работы с cURL
curl_close($curl);

Завершение запроса

Скорее всего, вы обратили внимание на строку curl_close($curl);, которой завершаются оба примера. Данная строка необходима для того, чтобы завершить сеанс работы с cURL, ресурс $curl, инициализация которого происходит в первой строке — уничтожается.

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

Давайте рассмотрим реальный пример отправки cURL запроса на языке php. Предлагаю подключиться к публичному API приватбанка и узнать курс валют на сегодня:

Код для этого примера будет выглядеть примерно следующим образом:

$url = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5';

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url,
    CURLOPT_USERAGENT => 'ctrlv cURL Request',
));

$response = curl_exec($curl);
curl_close($curl);

// конвертируем ответ от сервера в обьекты php
// так с ними проще работать
$json_response = json_decode($response);

foreach ($json_response as $currency_obj) {
    echo "Курс $currency_obj->base_ccy по отношению к $currency_obj->ccy: \n покупка - $currency_obj->buy \n продажа - $currency_obj->buy" . PHP_EOL . PHP_EOL;
}

В данном примере мы получили ответ $response и обработали на нашей стороне, выведя информацию о курсах в удобочитаемом формате.

Пример выше выведет на экран следующее:

Курс UAH по отношению к USD: 
 покупка - 26.80000 
 продажа - 26.80000

Курс UAH по отношению к EUR: 
 покупка - 30.30000 
 продажа - 30.30000

Курс UAH по отношению к RUR: 
 покупка - 0.39000 
 продажа - 0.39000

Курс USD по отношению к BTC: 
 покупка - 3638.3813 
 продажа - 3638.3813

Anatolii Koziura

Антураж-куражмонтаж в мире web разработки.

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

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