@WiNNeR_tig

Почему не видит x-api-signature-SHA256?

Нужно было получить заголовок X-Api-Signature-SHA256 , но он всяческий не хотел передаваться, вместе с ним передаётся ещё 10 заголовков типа User-Agent X-Forwarded-For итд , все их я мог получить.

Мой код который не давал мне получить X-Api-Signature-SHA256 :

if (!function_exists('getallheaders')){ 
    function getallheaders(){ 
		$headers = []; 
		foreach ($_SERVER as $name => $value){
			if (substr($name, 0, 5) == 'HTTP_'){ $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } 
		} 
		return $headers; 
    } 
}

$head                                      = getallheaders();
$validSignatureFromNotificationServer      = $head['X-Api-Signature-SHA256'];


А когда мне посоветовали перевести заголовки в нижний регистр:

if (!function_exists('getallheaders')){ 
    function getallheaders(){ 
		$headers = []; 
		foreach ($_SERVER as $name => $value){
			if (substr($name, 0, 5) == 'HTTP_'){ $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } 
		} 
		return $headers; 
    } 
}

$head = array_change_key_case(getallheaders(), CASE_LOWER);
$validSignatureFromNotificationServer      = $head[mb_strtolower('x-api-signature-SHA256')];


Всё заработало, но остался вопрос почему так ? Почему без проблем я получал другие заголовки типа типа User-Agent X-Forwarded-For а именно X-Api-Signature-SHA256 нет ? Есть предположения что из за функции getallheaders() которая не работает с cgi хотя в ней тоже стоит strtolower, в общем потратил на это час и хотелось бы просто знать почему так ?
  • Вопрос задан
  • 28 просмотров
Пригласить эксперта
Ответы на вопрос 1
@stkevich
$head = getallheaders();
$validSignatureFromNotificationServer = $head['X-Api-Signature-SHA256'];

$head = array_change_key_case(getallheaders(), CASE_LOWER);
$validSignatureFromNotificationServer = $head[mb_strtolower('x-api-signature-SHA256')];

В двух этих кусках получается совершенно разные массивы заголовков.
В первом случае ваш "X-Api-Signature-SHA256" мог передаваться как "X-Api-Signature-sha256" и, конечно, вы не могли получить его по ключу "X-Api-Signature-SHA256".
Во втором случае ВСЕ заголовки были приведены к нижнему регистру, поэтому "X-Api-Signature-SHA256" там тоже нет, а вот "x-api-signature-sha256" есть. Кстати, "User-Agent X-Forwarded-For" во втором случае тоже нет, но есть "user-agent X-forwarded-for".

Попробуйте сделать print_r или продебажить xdebug'ом и посмотреть что собственно в $head находится в обоих случаях. На вскидку могу предроложить что ключ такой "X-Api-Signature-sha256", но это не точно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
HTML Academy Санкт-Петербург
от 110 000 до 130 000 руб.
от 55 000 до 80 000 руб.
WACDAQ Москва
от 120 000 руб.