Ответ
Да, постоянно. В PHP для этого есть несколько инструментов, выбор зависит от контекста.
Для простых GET-запросов часто использовал file_get_contents() с контекстом:
$context = stream_context_create([
'http' => [
'method' => 'GET',
'header' => "Authorization: Bearer TOKENrn"
]
]);
$response = file_get_contents('https://api.example.com/data', false, $context);
$data = json_decode($response, true);
Для сложных запросов (POST, кастомные заголовки, SSL-настройки) применял cURL:
$ch = curl_init('https://api.example.com/data');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(['key' => 'value']),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer TOKEN',
'Content-Type: application/json'
],
CURLOPT_TIMEOUT => 10
]);
$response = curl_exec($ch);
if (curl_errno($ch)) {
throw new RuntimeException('CURL error: ' . curl_error($ch));
}
curl_close($ch);
В современных проектах предпочитаю использовать клиентские библиотеки, такие как Guzzle, которые инкапсулируют низкоуровневые детали, предоставляют удобный интерфейс и встроенные механизмы повторных попыток, обработки ошибок и логирования.
Ключевые моменты, которые всегда учитываю:
- Таймауты (соединение и чтение), чтобы не блокировать скрипт.
- Обработку HTTP-статусов (особенно 4xx и 5xx).
- Безопасность: валидацию входящих URL, использование HTTPS.
- Кэширование ответов, если данные не меняются часто, для снижения нагрузки на внешний сервис.