PHP
Отправка HTTP-запросов через cURL
Обёртка с таймаутами, заголовками, разбором JSON и проверкой SSL.
Код
<?php
declare(strict_types=1);
function httpRequest(
string $url,
string $method = 'GET',
?array $payload = null,
array $headers = []
): array {
$ch = curl_init();
$defaultHeaders = ['Accept: application/json', 'User-Agent: DigitMind/1.0'];
$options = [
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => strtoupper($method),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 3,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => true, // никогда не отключайте в продакшне
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_HTTPHEADER => array_merge($defaultHeaders, $headers),
];
if ($payload !== null) {
$options[CURLOPT_POSTFIELDS] = json_encode($payload, JSON_UNESCAPED_UNICODE);
$options[CURLOPT_HTTPHEADER][] = 'Content-Type: application/json';
}
curl_setopt_array($ch, $options);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($body === false) {
throw new RuntimeException('Ошибка cURL: ' . $error);
}
return [
'status' => $status,
'data' => json_decode($body, true, 512, JSON_THROW_ON_ERROR),
];
}