Разделы
Новости
 

Использование библиотеки CURL в PHP

Вообще всё предельно просто. CURL - это библиотека функций PHP, с помощью которой можно посылать запросы HTTP, из PHP скрипта. Собственно на практике используется всегда четыре функции(curl_init, curl_setopt, curl_exec, curl_close), рассмотрим их на примере простого GET запроса

<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://domain.com"); curl_exec($ch); curl_close($ch); ?>

Начинается использование CURL всегда с инициализации нового объекта, в первой строке мы объявляем переменную, которая и будет этим объектом. Во второй строке, используем функцию для задания параметра будущего запроса, в нашем случае мы задаем url ресурса на который направим запрос. В третьей строке выполняем сам запрос, функция curl_exec, если запрос пройдет успешно, выведет полученные данные, или ничего, если произошли какие то ошибки. Как выяснить, почему не прошел запрос, рассмотрим позже. Ну и после того как мы закончили межсерверный обмен, закрываем соединение функцией curl_close.

Как мы уже говорили, объекту можно передавать параметры, перед его исполнением, на самом деле объект CURL может принимать огромное количество параметров, все их рассматривать нет смысла, так как библиотека очень хорошо задокументирована, и даже на русском языке, например тут. Теперь, добавив несколько параметров, отправим запрос методом POST, и передадим в запросе несколько параметров.

<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://domain.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['var1'=>'Значение1', 'var2'=>'Значение2'])); $result = curl_exec($ch); curl_close($ch); ?>

Во первых, сделаем так, чтоб результат не выводился, а возвращался функцией curl_exec. Для этого устанавливаем параметр CURLOPT_RETURNTRANSFER в ненулевое значение. Теперь полученные данные будут возвращены функцией curl_exec, и загружены в переменную $result. Так же установим параметр CURLOPT_POST в ненулевое значение, для того чтоб запрос был выполнен методом POST. Ну и конечно же сами данные, необходимо установить как параметр CURLOPT_POSTFIELDS, значение этому параметру можно передать в виде ассоциативного массива, но данные должны быть должным образом кодированы, я рекомендую не думать над этим вопросом а применять функцию http_build_query к массиву, и полученную кодированную строку передавать в CURL, тогда будет всё в порядке.

Так используя различные параметры, можно добиться необходимого функционала, например: получение заголовков ответа, или же наоборот, установки заголовков запроса и т. д. Далее рассмотрим что же делать если запрос потерпел неудачу, вообще я сторонник того что б писать отказоустойчивый код, поэтому все предсказуемые ситуации должны быть обработаны. Обрабатываем ошибку запроса, например ресурс на который мы отправили запрос вообще ничего не ответил в течение установленного таймаута. Смотрим код.

<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://domain.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['var1'=>'Значение1', 'var2'=>'Значение2'])); if($result = curl_exec($ch)){ }else{ $info = curl_getinfo($ch); } curl_close($ch); ?>

Если наш запрос потерпит неудачу. то мы перейдем в секцию false условия, и там запрашиваем информацию о последней операции. Если использовать функцию без второго параметра, то вернется ассоциативный массив со всей информацией, или только одно значение, если передать его название вторым параметром. Опять же не будем рассматривать весь массив, дам ссылку на его описание на портале по PHP.

Ну вот, теперь Вы крупный специалист по межсерверному обмену. Удачи. )