Bonjour,
J'ai une page php sur mon serveur qui fait appel à une url distante pour récupérer le résultat JSON.
L'url distante renvoie bien les données avec l'entête application/json (déboggueur chrome)
J'essaye de mettre ce résultat sur ma page locale en utilisant file_get_contents pour servir une autre page locale.
La page que je génère contient dans son code source un retour chariot au début en plus du résultat distant et surtout est de content-type text/html au lieu de application/json
J'ai du en plus faire un stripslashes pour que ça soit un JSON valide.
Je ne comprends pas en ajoutant header('Content-type: application/json') que je reste toujours en text/html.
J'ai essayé plusieurs choses en vain et rien trouvé sur google.
J'ai bien évidemment testé une page simple qui renvoie bien sur mon serveur un content-type application/json pour écarter la piste du serveur.
Voici mon code :
J'ai essayé de rajouter un \r\n à la fin, essayé de lire avec un $context application/json pour file_get_contents sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 <?php header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } function smartstripslashes($str) { $cd1 = substr_count($str, "\""); $cd2 = substr_count($str, "\\\""); $cs1 = substr_count($str, "'"); $cs2 = substr_count($str, "\\'"); $tmp = strtr($str, array("\\\"" => "", "\\'" => "")); $cb1 = substr_count($tmp, "\\"); $cb2 = substr_count($tmp, "\\\\"); if ($cd1 == $cd2 && $cs1 == $cs2 && $cb1 == 2 * $cb2) { return strtr($str, array("\\\"" => "\"", "\\'" => "'", "\\\\" => "\\")); } return $str; } $site_link = curPageURL(); $site_link = str_replace('xxx','yyy',$site_link); $homepage = file_get_contents($site_link); $decoded = smartstripslashes($homepage); $data = json_decode($decoded, true); exit( json_encode($data)); ?>
J'ai fini par récupéré le JS ajax de google prototype.js en local et ôter la sécurité sur application/json pour que ça fonctionne. Mais je trouve cette solution non propre.
Avez-vous une idée sur comment résoudre ce content-type.
Merci de votre aide.
PHP/5.4.9
Partager