JackShcherbakov
@JackShcherbakov

Почему не получается получить доступ к заголовку поступающего запроса через массив $_SERVER?

Здравствуйте! Эта проблема вызывает у меня когнитивный диссонанс! Вообщем, есть вот такой говно код, обрабатывающий API запросы:
<?php
header("Content-Type:application/json");
if(in_array($_SERVER["CONTENT_TYPE"], ["application/json"])){ //(1)
			if(!(isset($_GET["cookie"])) && !($_GET["key"] == "secret")){
					http_response_code(403);
				$response_data = array(
					"error" => "bad_key"
				);
			}else{
				$response_data = array(
					"now" => time()
				);	
			}
			$response_data = json_encode($response_data);
				print $response_data . "\n";
				print $_SERVER["HTTP_CONTENT_TYPE"]; //(2)

}
?>

В строке (1) я пытаюсь проверить что хочет получить клиент. Тут возникает два вопроса:
  1. Почему не прокатывает проверка $_SERVER["CONTENT_TYPE"] == "application/json"?
  2. Почему не срабатывает $_SERVER["HTTP_CONTENT_TYPE"], как написано в книге?

Бред какой-то... Это еще не самое интересное....
В строке (2) если написать print $_SERVER["CONTENT_TYPE"];, то ничего не отправится в ответ, но если прописать $_SERVER["HTTP_CONTENT_TYPE"];, то ответ отправится, но без желанного вывода типа запроса, например, application/json.

Итого:
  • Почему один массив с префиксов HTTP_?
  • Как реализовать мою задумку?

Кстати, ответ должен быть отправлен, только если клиент хочет json.
Вот код, посылающий отчаянные запросы:
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
		<title>Манипулирование файлами</title>
	</head>
<body>
<?php
	$options = array(
			"key" => "secret"
	);
	$url = "http://asd/newFolder/formhandler.php?". http_build_query($options);
	$c = curl_init($url);
	curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($c, CURLOPT_HTTPHEADER, array("Content-Type:application/json"));
	//curl_setopt($c, CURLOPT_COOKIEJAR,  "/cookies.cookies");
	//curl_setopt($c, CURLOPT_COOKIEFILE, "/cookies.cookies");
	$res = curl_exec($c);
	$res = json_decode($res);
	print "Количество секунд с начала эпохи " . $res->now . "<br>";
	//print $res . "<br>";
	//print $_SERVER["HTTP_CONTENT_TYPE"];
?>
</body>

</html>

Гугл не помог.
Всем заранее спасибо!
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы