1

plop,

en PHP, j'ai besoin de lire une réponse HTTP, avec un script assez basique qui peut se résumer comme ça :
$fp = fsockopen ($host, 80, $errno, $errstr);

fputs ($fp, 'GET ' . $url . ' HTTP/1.1' . "\r\n");
fputs ($fp, 'HOST: ' . $host . "\r\n");
fputs ($fp, 'Connection: Close' . "\r\n\r\n");

for ($result = ''; !feof ($fp); )
    if (($line = fgets ($fp, 1024)) !== false)
        $result .= $line;

mais quand je récupère $result, il contient par endroit quelques "parasites" : deux retours "\r\n" suivi d'un nombre en hexadécimal, comme visible sur ce screen. quelqu'un a une idée de ce que c'est ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

c'est pas des headers ?
Ancien pseudo : lolo

3

si tu as des pbs, utilise la classe Snoopy, elle fait tout tout seul, et sépare les headers en autre, gère pas mal de chose, les cookies, les session, les proxy
Ancien pseudo : lolo

4

des headers en plein milieu de la page ? confus

sinon non, je sais qu'il y a des classes qui font ça très bien mais j'aimerais bien résoudre le problème moi-même happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

heu............ juste comme ca :

t'as essayer ca ?!
$a = file_get_contents("http://www.yaronet.com/");


parce que c'est quand meme bcp plus simple... wink
Ancien pseudo : lolo

6

Zephyr (./4) :
des headers en plein milieu de la page ?


en fait, je dis ca, car cela m'ai déjà arrivé de le voir : un header envoyé en plein milieu, sans avoir de message d'erreur. (en php, tu a un message d'erreur sur les headers, mais en asp, je ne sais pas par exemple)

en meme temps, j'ai l'impression que c'est Mirari que tu nous a montré => il est en php non ?
Ancien pseudo : lolo

7

Bizarre...
Je viens de tester avec « $host = "www.yaronet.com" ; $url= "/mirari/" ; », mais je n'ai pas eu ces parasites.
Spipu (./5) :
heu............ juste comme ca :

t'as essayer ca ?!
$a = file_get_contents("http://www.yaronet.com/");


parce que c'est quand meme bcp plus simple... wink
Moi aussi je fais ça, c'est quand même plus simple grin !
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

8

Zephyr> c'est normal, ton message est coupé en morceaux.

Le truc, c'est que ton bout de code est trop simpliste, tu n'analyses pas les en-têtes de la réponse. Tu aurais vu sinon que le serveur a dû t'indiquer ça :
Transfer-coding: chunked

Le corps du message pour les réponses encodées de cette façon est consistué de chunks. Chaque chunk début par la séquence
[0-9a-f]+\r\n

Ce nombre indique la taille du bloc suivant. Donc en gros tu le convertis en entier, tu lis le nombre d'octet correspondant depuis le flux, puis tu tombes sur le chunk suivant, avec à nouveau une taille, etc.

En principe le dernier chunk doit avoir une taille de 0.

[edit: chapitre de la rfc concernant le codage par chunks]

9

ah cool merci, je corrigerai ça ce soir happy
y'a d'autres surprises dans le genre qui peuvent arriver ?

Spipu > j'envoie des variables en POST, ce que ne permet pas "file_get_content" il me semble happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

10

cURL?

11

./4, deuxième phrase ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

12

genre faut lire tout ce que tu dis... wink

13

y'a d'autres surprises dans le genre qui peuvent arriver ?
A ma connaissance non, les autres codages ne doivent pas être utilisés si tu ne spécifies pas explicitement dans la requète que tu les supportes.

14

j'ai un petit pb :

je comptais piloter ma livebox avec un de mes scripts en php.

je comptais donc utiliser Snoopy (j'ai à utiliser du POST)

le pb, c'est que la livebox m'envoi les résultats avec du

Transfer-Encoding:chunked

ce qui fait que snoopy, qui gère mal le chunk, met plus d'une minute à me récuperer mes pages (car il n'envoir pas à la fin de chaque paquet l'information comme quoi il l'a bien recu,mais seulement à la fin de la page)

d'ou ma question : peut-on indiquer à un serveur qu'on ne veut pas utiliser de chunk.... ?
Ancien pseudo : lolo

15

d'ou ma question : peut-on indiquer à un serveur qu'on ne veut pas utiliser de chunk.... ?
Non. Le support de cet encodage est imposé par HTTP 1.1

16

vi, mais si on indique au serveur que l'on veut du http 1.0 ?
Ancien pseudo : lolo

17

Faut regarder le standard 1.0 pour voir.
Cela dit, de très nombreux sites nécessitent HTTP/1.1. Déjà, tous les hébergeurs vu que le virtual hosting ne peut fonctionner que si la requète présente un champ Host, qui est apporté par le HTTP/1.1

Je pense que ton problème avec ton truc c'est pas ce que tu dis. La particularité des requètes en chunked, c'est que la taille est pas connue à l'avance. Si ta lib ne gère pas le chunked correctement, elle doit lire indéfiniment, sans jamais détecter que la page est complètement chargée. Du coup, elle te rend la main uniquement quand le serveur finit par "timeouter". Pas le choix, faut gérer le chunked. Mais c'est pas dur hein ^^

18

en effet, le pb est exactement ca.

Du coup, je n'ai pasu voulu m'enbeter, et j'ai fait au plus rapide (meme si c'est pas propre) : si il y a la balise de fin d'html => j'arrete de lire... ca a corrigé le pb, mais ce n'est pas propre du tout...
Ancien pseudo : lolo