в настоящее время сервер возвращает следующие заголовки примерно так:
2014-11-13 00: 20: 04.079 myiOSApplication 46715: 1003]:
{ status code: 200, headers {
Connection = close;
"Content-Length" = 5;
"Content-Type" = "text/html; charset=UTF-8";
"Content-Typesss" = "application/json; charset=UTF-8"; //<-- Notice this appears, but soon as I remove the extra s characters, then it wont override the line above. :( so the content always returns `text/html` instead of the desired `application/json`
Date = "Thu, 13 Nov 2014 00:20:03 GMT";
Server = "Apache/2.2.26 (Amazon)";
Status = "200 OK";
StatusCode = 200;
"X-Powered-By" = "PHP/5.3.28";
} }
Я могу с легкостью установить другие заголовки, но СКОРО, поскольку я пытаюсь установить заголовок с ключом: Content-Type
вот так:
header('Content-Type : application/json; charset=UTF-8');
тогда мой ключ переопределяется с системным и игнорирует мой тип заголовка.
Что я могу сделать?
Обновление 1:
В ответ на запрос @ scuzzy о —
Что произойдет, если вы отобразите свой заголовок, а затем выйдите (); сценарий? например, заголовок (‘Content-Type: application / json; charset = UTF-8’); exit (‘{«hello»: «world»}’);
Вот ответ iOS на это:
2014-11-13 00:59:25.801 myiOSApplication [46849:1f07] RESPONSE: <NSHTTPURLResponse: 0x61800002c060> { URL: http://www.riabp.com/KINGS/Secure/Rajam/Get/Employees } { status code: 200, headers {
Connection = close;
"Content-Length" = 18;
"Content-Type" = "text/html; charset=UTF-8";
Date = "Thu, 13 Nov 2014 00:59:25 GMT";
Server = "Apache/2.2.26 (Amazon)";
"X-Powered-By" = "PHP/5.3.28";
} }
2014-11-13 00:59:25.801 KingsEMS[46849:303] Error: Request failed: unacceptable content-type: text/html
2014-11-13 00:59:25.801 KingsEMS[46849:303] JSON Error: {"hello":"world"}
Я не уверен, что это все еще активный вопрос, но у меня была похожая проблема, из-за которой заголовок типа контента устанавливался PHP для text / html, но когда я хотел загрузить изображение, используя PHP, я не мог t обновить тип содержимого заголовка на image / gif, чтобы файл загружался, но не мог быть открыт.
В итоге ответом было вернуть выходной буфер и убедиться, что он пуст:
$html = ob_get_clean();
$html = str_replace(" ", "", $html);
Я предполагаю, что где-то в коде было какое-то пустое пространство, которое заставляло вывод оставаться исходным типом содержимого.
Ричард
ОБНОВЛЕНИЕ: это должно быть добавлено до установки нового значения заголовка, в случае, если это не было очевидно.
Если вы используете фреймворк, такой как Silex, Zend и т. Д., Или просто пишете обычный php-код, и вы используете эти функции
json_encode($query) //php json function
$app->json($query) //Silex framework function`
но ни один из них не решает вашу потребность в получении типа контента json, есть небольшая хитрость, которая может вам помочь:
header('Content-Type: application/json'); //before everything
$query =.... //retrieve your data in every way you need
$queryjsoned=json_encode($query); //jsonify your query
exit($json); //it's very important,it solves your life
return $queryjsoned; //if you are in a function/Route,but it isn't mandatory
очень странно, что вам нужно сделать выход для переопределения типа контента.