<?php
/**
* Validates response headers against a configuration with a timeout.
*
* @param array $expectedHeaders Array of expected headers and their values.
* @param int $timeout Timeout in seconds.
* @param string $url The URL to validate.
* @return bool True if all headers are valid, false otherwise.
*/
function validateResponseHeaders(array $expectedHeaders, int $timeout, string $url): bool
{
$start = time();
$response = @file_get_contents($url, false, stream_context_create([
'timeout' => $timeout,
]));
if ($response === false) {
// Handle timeout or other errors during request
return false;
}
$end = time();
if (($end - $start) > $timeout) {
//Timeout occurred
return false;
}
$headers = get_headers($url);
if ($headers === false) {
return false; //Error getting headers
}
foreach ($expectedHeaders as $headerName => $expectedValue) {
if (isset($headers[0][$headerName])) {
if (strtolower($headers[0][$headerName]) !== strtolower($expectedValue)) {
return false; // Header value does not match
}
} else {
return false; //Expected header is missing
}
}
return true; //All headers are valid
}
// Example Usage:
/*
$expectedHeaders = [
'Content-Type' => 'application/json',
'X-Custom-Header' => 'my-value',
];
$timeout = 5; // seconds
$url = 'https://example.com/api/data';
if (validateResponseHeaders($expectedHeaders, $timeout, $url)) {
echo "Response headers are valid.\n";
} else {
echo "Response headers are invalid.\n";
}
*/
?>
Add your comment