Recuperer une image (png) générée en php sur un site distant

Résolu/Fermé
0cTeT Messages postés 39 Date d'inscription samedi 15 juin 2013 Statut Membre Dernière intervention 30 mars 2020 - 15 sept. 2014 à 17:44
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 sept. 2014 à 18:45
Bonjour,
la question est dans le titre, je n'arrive pas à récupérer une image générée en php sur un site distant. J'utilise les sockets : j'envoie une requête GET /.../fichier.php avec la fonction send() en utilisant les cookies dans l'entête pour m'identifier (il faut s'authentifier pour pouvoir accéder a la page en php), et ensuite la fonction recv() pour enregistrer la reponse dans une chaine de caractère que j'appelle buffer. Buffer contient donc l'entête html, avec content-type : image/png et normalement les données de l'image générée par la page php. J'affiche buffer avec printf("%s",buffer),l'entête html est affichée, puis ensuite, les données, sauf que ces données sont seulement :

ëPNG
-> (normalement cette flèche est un seul caractère sur la console)

Je pensais obtenir un long flux de données, qui après parsing aurait été isolé de l'entête html puis enregistré dans un fichier avec l'extension png. Mais il semblerait que l'image ne soit pas contenue dans buffer, ou alors c'est moi qui est rien compris ^^. En créant une boucle répétant la fonction recv() (si l'image était envoyée par paquets) je n'ai pas eu des résultats concluants...
Si quelqu'un maitrise les sockets et le téléchargement d'image manuellement ou avec une librairie merci de m'indiquer la procédure !
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
16 sept. 2014 à 11:44
Bonjour,

printf("%s", buffer); affiche les caractères pointés par buffer jusqu'au premier '\x00' rencontré, ce qui ne doit pas manqué dans un flux binaire.
Que souhaites-tu faire avec l'image une fois téléchargé ?

Cdlt,
0
Utilisateur anonyme
16 sept. 2014 à 12:05
Bonjour fiddy,

Méfie-toi de tes habitudes de C. Chez moi,
<?php printf ("%s","abc".chr(0)."def"); ?>
affiche bien "abcdef".
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 16/09/2014 à 12:17
@le père. : oui, mais 0cTeT récupère l'image dans un programme C avec les sockets.

@fiddy et 0cTeT: En fait l'entête d'un fichier PNG contient, à l'endroit où 0cTeT dit que l'affichage s'arrête, un caractère 0x1A (26 en décimal, qui correspond au caractère de contrôle Ctrl-Z, soit EOF sous Windows).

https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header


Dal
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
16 sept. 2014 à 12:41
Bien vu [Dal] !
0
Utilisateur anonyme
16 sept. 2014 à 13:03
Oups.. Comment avais-je fait pour me persuader que c'était du PHP ? C'est moi qui me suis laissé entraîner par mes habitudes.
Toutes mes excuses pour cette intervention inopportune.
Je file creuser un trou et me cacher dedans.
0
0cTeT Messages postés 39 Date d'inscription samedi 15 juin 2013 Statut Membre Dernière intervention 30 mars 2020 213
16 sept. 2014 à 17:38
Salut ! Merci pour toutes ces réponses, ça fait plaisir ! Et oui, en savant pourtant bien que printf ne pouvait afficher du binaire, j'ai quand même fait l'erreur... merci de m'avoir ouvert les yeux, on ne pense pas forcément aux erreurs les plus bêtes. Surtout que cette partie du programme était la plus simple , je programme un OCR pour les challenges de newbiecontest.org, c'était un peu frustrant d'être a cette programmation basique !
Bonne continuation.
0
Bonjour

Buffer contient donc l'entête html,
Ce n'est pas normal. Une image n'est pas en html.
Je suppose que tu veux parler de l'en-tête HTTP. Si tu mets les en-têtes et les données (l'image) dans un même buffer que tu envoies par print, ça ne marchera jamais : en php, les en-têtes doivent être envoyés avec la fonction header, ensuite tu peux envoyer les données avec print ou echo.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
Modifié par fiddy le 16/09/2014 à 12:42
Bonjour le père,

Il n'est pas question de php mais bien de C.

Cdlt,
0
0cTeT Messages postés 39 Date d'inscription samedi 15 juin 2013 Statut Membre Dernière intervention 30 mars 2020 213
16 sept. 2014 à 17:42
En effet, il s'agit bien des entêtes HTTP, j'étais à côté de la plaque hier soir ! Un peu de fatigue et on fait pas mal de bêtises ^^
0