Menu

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

Messages postés
37
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 octobre 2017
- - Dernière réponse : fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
- 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 !
Afficher la suite 

2 réponses

Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1584
0
Merci
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,
[Dal]
Messages postés
5131
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juin 2019
777 -
@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).

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


Dal
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1584 -
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.
0cTeT
Messages postés
37
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 octobre 2017
138 -
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.
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1584 -
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).
0
Merci
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.
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1584 -
Bonjour le père,

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

Cdlt,
0cTeT
Messages postés
37
Date d'inscription
samedi 15 juin 2013
Statut
Membre
Dernière intervention
30 octobre 2017
138 -
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 ^^