В какой-то момент времени все начинающие php разработчики сталкиваются с необходимостью сделать один или несколько php запросов в их приложении.
В php это делается с помощью библиотеки curl
, которая является обёрткой над утилитой curl
, которую вы можете найти под любую OC.
Для тех, кто не любит читать, а хочет разобраться сам, сразу приведу полный фрагмент кода с функцией, которую я использую для http запросов к различным API в своих проектах:
<?php
function request($method, $url, $requestbody = null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (strtolower($method) == "post") {
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json"
));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestbody));
}
$data = curl_exec($ch);
curl_close($ch);
if (isset($data)) {
return json_decode($data);
}
return null;
}
Так как это универсальная функция, в качестве аргументов в неё передается $method
— строка с названием http метода (GET
, POST
и многие другие), $url
— URL запрашиваемой страницы и опциональный аргумент $requestbody
, который потребуется нам для передачи body
с POST
запросами (туда мы передадим ассоциативный массив).
$ch = curl_init();
Этим мы инициализируем пока пустой запрос curl, в который мы будем по очереди загружать различные опции через функцию curl_setopt
, со всеми доступными опциями вы можете ознакомиться в справке php, я же расскажу только про используемые здесь.
curl_setopt($ch, CURLOPT_URL, $url);
Здесь мы передаем URL будущего запроса.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
Без этой опции запрос не вернёт нам ответ сервера, а только успешность этого запроса (в виде true
или false
), поэтому мы ставим флаг true
, т.к. в большинстве случаев нам важно содержимое ответа.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
Будет ли запрос следовать переадресации с использованием 301 Redirects. Чтобы не заморачиваться, ставим true
, хотя это может иногда сыграть злую шутку.
Далее мы проверяем какой вид http запроса мы хотим сделать, если это POST
запрос, то мы говорим об этом curl
и передаем body запроса.
if (strtolower($method) == "post") {
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json"
));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestbody));
}
Здесь же мы задаем заголовок Content-Type
, в большинстве API в body
ожидается именно application/json
.
$data = curl_exec($ch);
curl_close($ch);
if (isset($data)) {
return json_decode($data);
}
return null;
Непосредственно осуществляем запрос, записывая результат в $data
, закрываем его (освобождая ресурсы сервера) и возвращаем расшифрованный json, если ответ был получен.
Вот таким довольно лёгким способом вы можете делать http-запросы в php. Напоследок, приведу пример тела запроса, чтобы ни у кого не возникало вопросов.
$requestbody = [
"filter" => [
"url" => $url,
],
"fields" => [
"title" => 1,
"date" => 1,
"content" => 1,
"description" => 1,
"image" => 1,
"nextlink" => 1,
"prevlink" => 1,
"customhomepage" => 1,
"tags" => 1
]
];