Manuel d'utilisation de webget et de son systeme de callback: Syntaxe de la fonction: wbs.webget / getfile Utilitée: effectuer un téléchargement de fichier 6 arguments requis: [nom] [alias de callback] [port] [ssl (0/1)] [url] [destination] exemple: wbs.webget download callback 80 0 http://www.google.fr/intl/fr_fr/images/logo.gif c:/file.gif note: si le parametre [destination] est = à "x" alors aucun fichier ne sera créé ni écrit (mode headers uniquement) Pré-parametres il est possible de des options d'entetes personalisé en l'entran manuelement dans la table AVANT l'appel de la commande wbs.webget ou getfile cas de l'user agent: syntaxe: hadd -m wbs.webget.[nom-de-la-conection] user-agent [votre user agent] exemple: hadd -m %table wbs.webget.download user-agent mIrc $version Autres cas (meme syntaxe au niveau du hadd): connection [Keep Alive/close] (keep alive n'est pas encore geré coté client) authorization [données a transmetre] (ce cas est utile par exemple lors d'une demande d'authentification au reseau msn en TWN) http-version x (x = version a transmetre: 1.0 ou 1.1 generalement (par defaut 1.0))) host x (x = host de votre choix (il est préférable de laisser le script le déterminer mais parfois il faut le passer manuelement) cookie x (x = la valeur que vous désirez envoyer) no-referer x (si x != 0 alors la fonction n'envera pas de referer) referer x- (envera la valeur spécifiée en tant que referer) cache-control x (permet de spécifier le control du cache (uniquement utile pour certains serveurs qui le demandent) no-user-agent x (si x > 0 alors aucun user-agent ne sera envoyé) user-agent x (x = user agent de votre choix) file-temp x- (x- = chemin du fichier temporaire) redirects-left x (x = nombre de redirection maximales autorisé (entier)(int)) get x- (envera la valeur de x- en tant que get) post -x (pareil sauf que la les donneés seront envoyées en post) accept -x (permet de spécifier ce que l'on veut en accept) cache-control -x (definis le controle du cache) nofile 1 (spécifie qu'aucun fichier ne doit etre écrit, de ce fait le retour du socket sera fait via un callback) note: il est maintenan possible de spécifier ces parametres lors de l'evenement "pre-connect" envoyé au callback (donc apres l'appel de la fonction /getfile) cas spécifique à /getfile si vous employez /getfile sans arguments la fonction affichera des statistiques sur les socket (de wbs.webget) en cour dans la fenetre courante Retours de la fonction callback Préface: le systeme de callback est un systeme de retour des codes d'information (headers) transmis par le serveur http ce systeme redirige chaque evenement vers une alias de votre choix Utilitée: Rendre plus maléable le webget en vous offrant diverses possibilitées (creation de bares de progression, gestion des erreures etc) Retours de la fonction: la fonction retourne TOUT ses evenement de la maniere suivante: syntaxe: [nom de la conction] [titre] [information (optionel)] $1 $2 $3- exemple: wbs.webget.download http 200 note: le nom de la conction est AUSSI le nom de la htable qui contiens les informations sur le socket Retours: $1 pre-connect (est retourné jsute avant l'ouverture du socket, l'intéret est de pouvoir effectuer des modification sur la htable avant l'ouveture du socket) $1 info open x (x est l'heure au format $ctime ou la conction à été ouverte avec le serveur) $1 info serverip x y (x ici est l'addresse ip du serveur,y = port distand) $1 http x (x est le code de retour http, il devrais TOUJOUR etre vérifié) $1 buffer x- (x- est le contenu complet et brut du retour du serveur, peut etre utile pour récuperer certaines info) $1 info conten-lenght x (x correspond a la taille du fichier en octects) $1 close x y z (x = $ctime de la fin du téléchargement, y = durée du téléchargement en secondes, z = commentaire) $1 info start x (x retourne le $ctime du debut du transfer binaire) $1 error sockerr x (x retourne le N° du code d'erreur de $sockerr) $1 error x y (x retourne le code d'erreur http, y = temp de la conection en secondes,utilisez isnum pour le differencier du précédent) $1 reconnect x- (x- retourne les arguments qui vont etre re-transmis a la commande wbs.webget (dans le cas d'une erreur 301 ou 302)) $1 sockwrite -x (x- retourne l'argument que de sockwrite (-n) ainsi que le contenu de tout ce qui est envoyé par le socket) $1 cookie x- (x- est la valeur du cookie transmise par le serveur) $1 file "x" (retourne le chemin du fichier téléchargé entre "" pour gerer les espaces) $1 ierrror x y (x retourne le numero d'erreur interne, y est un commentaire (peu etre absent)) Informations complémentaires: la htable du dialog est toujour effacé a la fermeture de la connction sauf dans le cas d'une coupure du socket demandée par l'utilisateur aussi il est important de faire un hfree wbs.webget.[nom] pour s'assurer que les information temporaires soient supprimées dans le cadre d'une suppression automatique (fermeture du socket de maniere normale ou via une erreur serveur) la suppression se fait TOUJOUR APRES le retour du callback pour vous permetre de récuperer des informations avant la suppression de la table Informations sur la htable: nom: wbs.webget.[nom de la conction] (le nom est le meme que celui du socket, et est retourné en tant que permier argument par la fonction de callback) champs: user-agent x (a la place de "x" vous pouvez spécifier le user agent de votre choix avant l'appel a la commande wbs.webget) mode x (ici le mode actuel de transfer: 0 = headers (ascii), 1 = binaire) name x (le nom de la connction) open $ctime (l'heure d'ouverture du socket) get [url] (contiens l'url complete du fichier non parsé) callback x (x = nom de l'alias de callback à appeler (peu ne pas etre definis au quel cas aucun appel ne sera fait)) file x (x = fichier de destination sur le disque dur) (peut ne pas être présent si "x" à été spécifié en parametre) Anexe: Utilisation du dialogue integré: /dialog -m wbs.webget wbs.webget note: je n'ai integré ce dialogue que dans le but de vous permetre d'avoir un exemple d'utilisation de ma fonction ainsi que de son systeme de callback son usage n'est absolument pas indispenssable, il vous est meme possible de supprimer toute la premiere partie du code jusqu'a la section signalée sans que le code n'en soit affecté. Codes d'erreures internes: * 1 : le fichier temporaire existe deja (il est encore temp de modifier son emplacement) * 2 : nombre de reconection par redirection limide atteind (16 par defaut) Codes de retour HTTP: * 100 : OK pour continuer * 101 : le serveur a changé de protocoles * 200 : requête effectuée avec succès * 201 : document créé (raison : nouvelle URI) * 202 : requête achevée de manière asynchrone (TBS) * 203 : requête achevée de manière incomplète * 204 : aucune information à renvoyer * 205 : requête terminée mais formulaire vide * 206 : requête GET incomplète * 300 : le serveur ne peut pas déterminer le code de retour * 301 : document déplacé de façon permanente * 302 : document déplacé de façon temporaire * 303 : redirection avec nouvelle méthode d'accès * 304 : le champ 'if-modified-since' n'était pas modifié * 305 : redirection vers un proxy spécifié par l'entête * 307 : HTTP/1.1 * 400 : erreur de syntaxe dans l'adresse du document * 401 : pas d'autorisation d'accès au document * 402 : accès au document soumis au paiement * 403 : pas d'autorisation d'accès au serveur * 404 : la page demandée n'existe pas * 405 : méthode de requête du formulaire non autorisée * 406 : requête non acceptée par le serveur * 407 : autorisation du proxy nécessaire * 408 : temps d'accès à la page demandée expiré * 409 : l'utilisateur doit soumettre à nouveau avec plus d'infos * 410 : cette ressource n'est plus disponible * 411 : le server a refusé la requête car elle n'a pas de longueur * 412 : la précondition donnée dans la requête a échoué * 413 : l'entité de la requête était trop grande * 414 : l'URI de la requête était trop longue * 415 : type de média non géré * 500 : erreur interne du serveur * 501 : requête faite au serveur non supprimée * 502 : mauvaise passerelle d'accès * 503 : service non disponible * 504 : temps d'accès à la passerelle expiré * 505 : version HTTP non gérée SSL: l'usage du ssl requier opensll d'installé sur votre ordinateur, vous pouvez le trouver a cette addrese: http://www.mirc.co.uk/download/openssl-0.9.8i-setup.exe (requier un redemarage de mirc apres installation pour que celui ci le charge) Contact: je suis disponible sur: serveur: irc.gg.st port: 6667 canal: #php nick: Adamaru Si vous moddifiez mon code je vous serais tres reconaissant de m'en tenir au courant mais ce n'est en rien une obligation dans la mesure ou vous n'utilisez pas ce code pour faire un profit quel qu'il soit Je suis aussi ouvert à toute idée d'amélioration Changelog: 1.0: creation d'une alias $wbs.webget.version qui retourne la version du script wbs.webget ajout de plusieurs pre-evenement pour les téléchagement: host/autorization/connection/HTTP//x.y optimisation de la boucle de la partie binaire ajout d'un parseur externe au on *:sockread pour plus de claretée dans le code 1.1: Correction d'un bug ssl ajout des evenements "file","pre-connect","cookie" ajout de plusieures options de personalisation des headers ajout d'un mode headers only pour couper la connection coté client avan l'écriture des données sur le disque 1.2: Correction d'un bug dans l'envoi de l'entête "host" : un espace était superflus et retournais une erreur 400 sur certains serveurs 1.3: Correction d'un bug lors des erreures 301 et 302: si le serveur renvoyais un lien relatif la re-ouverture du socket ne se faisai pas Ajout d'une option "envoi de cookie" à l'interface graphique le callback nous prévient maintenan si le fichier temporaire existe deja sur le disque il est désormais possible de spécifier l'endroit ou le fichier temporaire sera stoqué sur le disque ajout d'une protection sur le nombre de redirections qu'un serveur peut nous faire faire la htable n'est plus supprimé apres une erreur 30x pour être re-utilisé lors de la prochaine connection 1.4: Correction d'un bug lors du remplacement du fichier de cache par le fichier cible a la fin du telechargement Ajout des options "post" "accept" et "cache-control" dans la htable de configuration. 1.41 Ajout de la possibilitée de ne pas écrire de fichier sur le disque, ainsi tout passe par un callback