[Aide] Fsockopen

Le
JC
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";
$send .= "Host: www.yahoo.com";
$send .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US;
rv:1.2.1) Gecko/20021204";
$send .= "Referer: www.yahoo.com";
$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";
$send .= "Accept-Language: fr-fr, en-us, en;q=0.50";
$send .= "Accept-Encoding: gzip, deflate, compress;q=0.9";
$send .= "Connection: Close";

fputs ( $io, $send );
$send = '';

do
{
$send .= fgets ( $io, 4096 );
} while ( strpos ( $send, "" ) 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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #29735

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 :
Auriez vous un exemple [...]


Non, désolé (avec Curl non plus, du reste). Je laisse la parole aux
éventuels gourous.

thierry
Le #29229
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: Closernrn";
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

JC
Le #29730
À 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 :
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.


JC
Le #29225
[...]
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: Closernrn";
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


fred
Le #23224
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/
Publicité
Poster une réponse
Anonyme