Requete HTTP : echec de socket_read()

supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008 - 29 nov. 2008 à 11:33
tardigrade Messages postés 208 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 décembre 2008 - 2 déc. 2008 à 18:15
Bonjour à tous

J'utilise depuis un certain temps un même script pour envoyer/recevoir des requêtes HTTP (socket_create, conenct, write, etc...) jusqu'à l'étape de lecture :

$reception = '';

while($buff = socket_read($socket, 2000)){

   $reception.=$buff;

}

Jusqu'à présent ça marchait niquel, mais quand j'essai avec facebook le script mouline 10minutes avant de me donner le résultat, accompagné d'un joli warning :
Warning: socket_read() [function.socket-read]: unable to read from socket [104]: Connection reset by peer

En gros j'ai l'impression que mon script ne comprend pas qu'il n'y a plus rien à lire.
Quelqu'un a une idée merveilleuse ? je peu donner plus de détails si besoin

merci d'avance,

Sylvain

5 réponses

yopai_v Messages postés 47 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 21 avril 2010
30 nov. 2008 à 11:17
Je vais peut-être poser une question bête, mais pourquoi ne pas faire un fopen sur ton url distante ?
Php se chargera de tout et t'évitera les tracas de ce genre...
0
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008
30 nov. 2008 à 16:15
Ta question n'est point bête. Mais il ne me semble pas que fopen puisse envoyer des GET/POST, hors c'est ce que j'essai de faire
0
yopai_v Messages postés 47 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 21 avril 2010
1 déc. 2008 à 00:07
Si, il le peut, en utilisant un contexte.

Trouvé dans les commentaires sur http://fr.php.net/manual/fr/function.stream-context-create.php :
<?php

$data array ('foo'> 'bar', 'bar' => 'baz');
$data = http_build_query($data);

$context_options = array (

        'http' => array (

            'method' => 'POST',

            'header'=> "Content-type: application/x-www-form-urlencoded\r\n"

                . "Content-Length: " . strlen($data) . "\r\n",

            'content' => $data

            )

        );

$context = context_create_stream($context_options)
$fp = fopen('https://url', 'r', false, $context);
?>
0
supers03 Messages postés 106 Date d'inscription mardi 6 janvier 2004 Statut Membre Dernière intervention 1 décembre 2008
1 déc. 2008 à 10:42
Ha oki cool faut que j'essai ça
En fait hier soir j'ai réussi en bidouillant

- premièrement je scrute chaque paquet reçu pour détecter la présence de la balise </html> afin de quitter la boucle de moi même, sans attendre que le serveur me dise que c'est terminé. Bon ça reste de la bidouille.

- j'ai eu besoin d'accéder à une page sécurisé (https), et ne réussissant pas avec les sockets que j'utilisais j'ai opté pour fsockopen() (cette fonction avait le même souci de fin de réception, mais avec la bidouille précédente ça marche)

Je vais tout de même essayer fopen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tardigrade Messages postés 208 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 décembre 2008
2 déc. 2008 à 18:15
Remplace 2000 par 2048
0
Rejoignez-nous