|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour,
je viens d'essayer de comprendre le fonctionnement de la fonction fsockopen, mais j'ai encore du mal. J'ai recherché des exemples, mais les commentaires sont pas tjs là, ou alors ce sont des usines à gaz; :-( Je cherche à faire une fonction qui se connecte à une page pour la récupérer. Auriez vous un exemple pour récupérer dans une variable cette page par exemple : www.mondomaine.com/dossier/mapage.html Et en donnant comme parametres : Accept-Language: fr-fr User-Agent: Mozilla/5.0 Le seul script que j'ai trouvé et qui s'en rapproche le plus est celui-ci : if ( ( $io = fsockopen( "www.yahoo.com", 80, $errno, $errstr, 5 ) ) !== false ) { $send = "GET / HTTP/1.1\r\n"; $send .= "Host: www.yahoo.com\r\n"; $send .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n"; $send .= "Referer: www.yahoo.com\r\n"; $send .= "Accept: text/xml,application/xml,application/xhtml+xml,"; $send .= "text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,"; $send .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"; $send .= "Accept-Language: fr-fr, en-us, en;q=0.50\r\n"; $send .= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n"; $send .= "Connection: Close\r\n\r\n"; fputs ( $io, $send ); $send = ''; do { $send .= fgets ( $io, 4096 ); } while ( strpos ( $send, "\r\n\r\n" ) === false ); $info = decode_header ( $send ); $send = ''; while ( ! feof ( $io ) ) { $send .= fread ( $io, 8192 ); } fclose ( $io ); $send = decode_body ( $info, $send ); echo '<h3>Header Array</h3>'; echo '<pre>'; print_r ( $info ); echo '</pre>'; echo '<h3>Document Body</h3>'; echo $send; } les fonctions decode_header et decode_body ne sont pas recopiées, elles servent à mettre en forme les resultats. Merci de votre aide. JC. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Le 27/07/2007 15:28, JC a écrit :
> > je viens d'essayer de comprendre le fonctionnement de la fonction > fsockopen, mais j'ai encore du mal. > J'ai recherché des exemples, mais les commentaires sont pas tjs là, ou > alors ce sont des usines à gaz; :-( > Je cherche à faire une fonction qui se connecte à une page pour la > récupérer. À moins que tu ne tiennes à fsockopen juste pour le « challenge » d'utiliser des fonctions de bas niveau, sache que ce sera peut-être plus simple avec Curl : <http://fr2.php.net/curl>. > Auriez vous un exemple [...] Non, désolé (avec Curl non plus, du reste). Je laisse la parole aux éventuels gourous. |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Bonjour,
> je viens d'essayer de comprendre le fonctionnement de la fonction > fsockopen, mais j'ai encore du mal. Ok > Je cherche à faire une fonction qui se connecte à une page pour la > récupérer. > Ce n'est pas tout à fait la même chose. fsockopen est une fonction que je qualifierais de "bas niveau" dont l'utilisation peut procurer quelques plaisirs mais aussi de bon maux de tête. Dans l'exemple que tu cites, ce que tu sembles surtout vouloir faire c'est te connecter en HTTP à un serveur pour récupérer des données. Dans ce cas il est bien plus pratique d'utiliser CURL http://fr3.php.net/manual/fr/ref.curl.php si elle est disponible. Cette librairie est d'un niveau au dessus des sockets en ce sens qu'elle s'appuie sur les sockets pour mettre en oeuvre divers protocoles dont HTTP. En l'utilisant tu résoudras ton problème de récupération de page, mais ta compréhension de fsockopen ne progressera pas. La seule fois, pour l'instant, ou j'ai eu besoin de fsockopen, c'est pour valider une transaction paypal, $fp étant un socket valide: fputs ($fp, $header . $body); $res = ''; while (!feof($fp)) { $res .= fgets ($fp, 1024); } est pertinent dans mon contexte pour récupérer la réponse du serveur de validation paypal. Dans ton cas, le $send .= "Connection: Close\r\n\r\n"; me semble louche. Je ne suis pas un expert en HTTP mais tu sembles indiquer au serveur que tu ne veux pas attendre sa réponse ?? A vérifier donc dans une doc HTTP. Pour forger des requêtes HTTP, fiddler est un outils bien pratique aussi. http://www.fiddlertool.com/fiddler/ en espérant avoir aidé thierry |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
> À moins que tu ne tiennes à fsockopen juste pour le « challenge »
> d'utiliser des fonctions de bas niveau, sache que ce sera peut-être plus > simple avec Curl : <http://fr2.php.net/curl>. > >> Auriez vous un exemple [...] > > Non, désolé (avec Curl non plus, du reste). Je laisse la parole aux > éventuels gourous. merci de la reponse. je connaissais aps cette fonction, et elle est disponible chez mon hebergeur. parfait ! J'etais parti sur le fonction fsockopen car j'avais besoin d'envoyer des headers, mais cela est possible aussi avec cette fonction. merci. JC. |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
[...]
> Dans l'exemple que tu cites, ce que tu sembles surtout vouloir faire > c'est te connecter en HTTP à un serveur pour récupérer des données. > Dans ce cas il est bien plus pratique d'utiliser CURL > http://fr3.php.net/manual/fr/ref.curl.php > si elle est disponible. > Cette librairie est d'un niveau au dessus des sockets en ce sens qu'elle > s'appuie sur les sockets pour mettre en oeuvre divers protocoles dont HTTP. Merci pour cette réponse. Efectivement, je vais me pencher la dessus. J'ai deja trouvé quelques exemples de cette fonction. > Dans ton cas, le > $send .= "Connection: Close\r\n\r\n"; > me semble louche. Je ne suis pas un expert en HTTP mais tu sembles > indiquer au serveur que tu ne veux pas attendre sa réponse ?? A vérifier > donc dans une doc HTTP. Apparement c'est bien comme cela qu'elle s'emploi. Dans mes differents tests, j'obtenais bien la page, mais suivant les serveurs, j'obtenais des resultats differents. > > Pour forger des requêtes HTTP, fiddler est un outils bien pratique aussi. > http://www.fiddlertool.com/fiddler/ Merci, je vais regarder ce lien. > > en espérant avoir aidé > > thierry |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
Bonjour JC,
Pour lire les requetes passées par le navigateur, a ré-écrire via CURL, rien de mieux que Firefox et un pluging nommé LiveHTTPHeaders. dispo à http://livehttpheaders.mozdev.org/ |
|
![]() |
| Outils de la discussion | |
|
|