Отправка запросов с помощью curl
Для обмена данными между серверами используются различные методы. В статье показываем, как отправить запрос на сервер с помощью 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 и получить нужные данные, читайте здесь. Как при этом еще и отправить файлы, узнаете в этой статье
Истории из жизни айти и обсуждение кода.