Recuperer une image (png) générée en php sur un site distant [Résolu/Fermé]

Signaler
Messages postés
40
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
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 !

2 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
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,
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937
@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
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Bien vu [Dal] !
Utilisateur anonyme
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.
Messages postés
40
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
206
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.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Faut surtout se poser la question de la pertinence du langage face à tel problème.
Perso, pour des besoins ponctuels où la vitesse n'est pas une contrainte, je me dirigerais vers un langage de scripting (python pour ne citer que lui).
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.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Bonjour le père,

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

Cdlt,
Messages postés
40
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 mars 2020
206
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 ^^