Page 1 sur 1

Récupérer les headers d'une page distante appelée dans un sc

Posté : 25 sept. 2007, 12:11
par zeus
Bonjour à tous.

Pour les besoins d'un webservice, je suis en train de construire un script qui peut retourner soit une trame XML compressé, soit une trame XML non compressée (en fonction de la réussite ou non de l'authentification, de la disponibilité des données, ...)

Il me faut donc détecter, sur le client, si le contenu retourné est compressé ou non afin de déterminer si une décompression est nécessaire ou non.
Lorsque le serveur envoi des données compressé, le Content-Type du header est "application/zip" alors que lors de l'envoi d'une trame XML simple, ce Content-Type est "text/xml"

Le principe retenu est donc de choisir le traitement en fonction du header.

Et là ... je bloque
La seule solution que j'ai trouvée, c'est d'ouvrir une socket sur le serveur pour récupérer header + contenu et de séparer le contenu des headers.

Est-ce que quelqu'un connaitrait le moyen de connaitre les headers d'une ressource distant depuis un script PHP ?

Je dispose de PHP5, le client qui va recevoir ce script aussi mais je ne peux pas lui demander d'installer des extensions.

Re: Récupérer les headers d'une page distante appelée dans u

Posté : 25 sept. 2007, 12:19
par Hubert Roksor
Est-ce que quelqu'un connaitrait le moyen de connaitre les headers d'une ressource distant depuis un script PHP ?
Ça dépend, tu parles d'un stream? Si c'est le cas, ce sera stream_get_meta_data() (sous l'index wrapper_data) mais avec un piège : ça ne fonctionne que si le serveur en face répond par un 200 (et peut-être d'autres codes, je sais que ça ne fonctionne pas avec un 304). Si stream_get_meta_data() ne s'applique pas, surprise ! PHP possède une variable magique $http_response_header qui s'auto-initialise dans le scope courant et qui contient les en-têtes sous forme d'un tableau. Si tu l'utilises, je te conseille de faire un unset($http_response_header) avant ton fopen()/file_get_contents() car en cas d'erreur la variable n'est pas réinitialisée et tu pourrais confondre le résultat d'un appel précédent avec celui qui vient d'échouer.

Posté : 25 sept. 2007, 14:57
par zeus
Génial Hubert :pouce: :agenouille:

Franchement, ta solution est géniale, je suis passé d'une centaine de lignes à 20 lignes pour le même fonctionnement.

Merci beaucoup Hubert ... :agenouille: :ordi: :pouce: :boire9: :boire4:

Posté : 25 sept. 2007, 15:12
par Hubert Roksor
No prob' :karu: