Отправка запросов с помощью curl

апрель 19 , 2015
Метки:

Для обмена данными между серверами используются различные методы. В статье показываем, как отправить запрос на сервер с помощью curl

Отправка get- и post-запросов происходит так.


Отправка get-запросов.

Допустим, у нас есть сайт mysite.com, который предоставляет нам api для получения списка неких пользователей. И позволяет передавать гет-параметры для фильтрации выборки, например, имя и возраст. Мы хотим отправить запрос на этот сторонний сайт и получить от них список нужных нам юзеров для каких-то своих нужд.

    if ($curl = curl_init()) {
        curl_setopt($curl, CURLOPT_URL, 'http://mysite.com/get_users.php?name=Jim&age=20');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($curl);
        curl_close($curl);
        // Обработка результатов, полученных от сервера в переменную $result
        ...
    }

Что здесь происходит? Сначала инициализируется сессия curl. Затем задается список параметров запроса. CURLOPT_URL определяет обычный url, с которого мы хотим получить данные. CURLOPT_RETURNTRANSFER = true говорит о том, что мы хотим получить ответ с удаленного сервера. Этот ответ приходит в переменную $result, с которой мы уже можем делать все, что угодно.


Отправка post-запросов.

Допустим, то же самое api позволяет нам не только получать информацию о пользователях, но и менять ее. Например, самим задавать имя и возраст, зная id юзера. Показываю, как примерно это происходит.

    if ($curl = curl_init()) {
        $fields = 'user_id=12&name=Jim&age=20';
        curl_setopt($curl, CURLOPT_URL, 'http://mysite.com/update_user.php');
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($curl);
        curl_close($curl);
        // Обработка результатов, полученных от сервера в переменную $result
        ...
    }

При отправке post-запроса приходится писать чуть больше кода, но не страшно, он достаточно понятный. В переменной $fields мы указываем имя и возраст, добавляем user_id, чтобы удаленный сервер мог понять, какого именно юзера мы хотим отредактировать. Параметр CURLOPT_POST устанавливается в true, а CURLOPT_POSTFIELDS в $fields. CURLOPT_RETURNTRANSFER также устанавливается в true, так как мы надеемся, что сервер что-то ответит нам, например, успешно ли прошло обновление данных, а если нет, то возвратится код ошибки или текстовое ее описание.

Бывает удобно воспользоваться функцией http_build_query($data), чтобы сформировать строку для отправки. Например, для отправки всех POST-параметров используйте $fields=http_build_query($_POST);

Иногда в результате запроса мы получим в ответ xml-строку. Как распарсить xml и получить нужные данные, читайте здесь. Как при этом еще и отправить файлы, узнаете в этой статье

Метки:
Заходите в группу в контакте - https://vk.com/webdevkin
Анонсы статей, обсуждения интернет-магазинов, vue, фронтенда, php, гита.
Истории из жизни айти и обсуждение кода.
Как Вам статья? Оцените!