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

Résolu
0cTeT Messages postés 39 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
@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   Statut Contributeur Dernière intervention   1 846
 
Bien vu [Dal] !
0
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.
0
0cTeT Messages postés 39 Date d'inscription   Statut Membre Dernière intervention   213
 
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
Utilisateur anonyme
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   213
 
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