Здравствуйте! Эта проблема вызывает у меня когнитивный диссонанс! Вообщем, есть вот такой говно код, обрабатывающий 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) я пытаюсь проверить что хочет получить клиент. Тут возникает два вопроса:
- Почему не прокатывает проверка
$_SERVER["CONTENT_TYPE"] == "application/json"
?
- Почему не срабатывает $_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>
Гугл не помог.
Всем заранее спасибо!