Requete HTTP : echec de socket_read()

Signaler
Messages postés
106
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
1 décembre 2008
-
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008
-
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

Messages postés
47
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010

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...
Messages postés
106
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
1 décembre 2008

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
Messages postés
47
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010

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);
?>
Messages postés
106
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
1 décembre 2008

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
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

Remplace 2000 par 2048