PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.php > [Aide] Fsockopen
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
[Aide] Fsockopen

Réponse
 
LinkBack Outils de la discussion
Vieux 27/07/2007, 14h28   #1
JC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut [Aide] Fsockopen

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.
  Réponse avec citation
Vieux 27/07/2007, 16h00   #2
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [Aide] Fsockopen

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.
  Réponse avec citation
Vieux 27/07/2007, 16h34   #3
thierry
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [Aide] Fsockopen

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
  Réponse avec citation
Vieux 27/07/2007, 16h34   #4
JC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [Aide] Fsockopen

> À 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.
  Réponse avec citation
Vieux 27/07/2007, 18h09   #5
JC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [Aide] Fsockopen

[...]
> 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

  Réponse avec citation
Vieux 01/08/2007, 07h02   #6
fred
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [Aide] Fsockopen

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/
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 20h27.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,11020 seconds with 14 queries