TELECHARGEMENT DE FICHIER PAR PROTOCOLE HTTP 1.0 VIA SOCKET

cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 - 13 févr. 2009 à 01:33
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009 - 7 juil. 2009 à 13:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49257-telechargement-de-fichier-par-protocole-http-1-0-via-socket

hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
7 juil. 2009 à 13:37
le manuel se trouve maintenant ici:
http://www.wbsscript.free.fr/files/man/wbs.webget.txt
Zova Messages postés 150 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 24 août 2010 2
20 mars 2009 à 19:36
Bien foutu, complet et commenté, que demandes le peuple ? :)
Vraiment une bonne idée d'application des sockets, et la fonction pour le callback c'est vraiment bien vu ! 9/10, la perfection n'existe pas^^
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
10 mars 2009 à 19:51
Voila je viens de mètre à jours, la grande nouveauté cette fois ci c'est la possibilité d'utiliser la fonction en mode "headers" uniquement si besoin, étant en train de coder un client msn en mirc script j'avais besoin de récupérer des headers pour l'authentification au service et pour cela je devais envoyer des headers non standards, j'ai donc ajouté les fonctionnalité au code (j'ai mis le manuel à jours)
cas ajoutées:
hadd -m %table connection Keep-Alive [peu etre ce que vous voulez a la place de keep-alive, generalement "close" par defaut)
hadd -m %table Authorization [parametres]
hadd -m %table http-version 1.1 (permet ici de dire au serveur que l'on utilise http 1.1 au lieu de 1.0 par defaut)

voila j'espere que cela vous sera aussi utile qu'a moi :)
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
9 mars 2009 à 04:07
un petit exemple tout simple:

dialog wbs.getimage {
title "Wbs.getimage"
size -1 -1 292 244
option dbu
edit "", 1, 3 9 248 10
button "Get", 2, 252 7 37 12
icon 3, 3 21 285 219
}

on *:dialog:wbs.getimage:sclick:2:{
wbs.webget wbs-getimage wbs.getimage.callback 80 0 $did(1) image.jpg
}
alias wbs.getimage.callback {
if ($2 == close) did -g wbs.getimage 3 image.jpg
}
éssaie avec: http://www.ircfr.com/gdi/um/857098.cs.jpg
ou n'importe quelle autre image.jpg sur le web
j'espère que mon exemple sera suffisamment concret :)
l'idée n'est pas de ré-inventer le téléchargement mais plutôt de permettre aux scripteurs d'améliorer les gestionnaire de mises a jours par exemple
donkishock Messages postés 26 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 5 mars 2009
5 mars 2009 à 11:10
"Un exemple fameux de se code, serait de faire un system de lecteur d'image, ya toujours plein de gens qui poste des liens, bah avec ce genre de truc, on pourrait voir l'image sans même changer d'application :)"
Tu reponds partout parfaitement à ma question, et j'adore ton idée :)
Ps: Je ne cherchais surtout pas à critiquer ce code, je cherchais plutot une raison de le prendre ;)
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
4 mars 2009 à 15:32
"mais franchement pourrais tu expliquer à quoi cela sert de télécharger via protocole http depuis un mirc, sachant que tout le monde possède un navigateur web plus beau et rapide que mirc, peut etre ai je mal compris le but de cette remote et je m'en excuse"

C'est pas que tu as mal compris, c'est juste que dire ceci n'est pas très censé.
Il est certain que on remplacera jamais un navigateur par mirc, tout comme on sait tous qu'il existe des limites au langage.Mais justement on essaye de les repousser, je peux te garantir que cette source est plus utile sur ce site que 90% des autres sources, elle va aider tout ceux qui galère un peu en socket.
Le but de mirc est de se simplifier la vie sur irc, donc de pas allé ds le navigateur rentré l'url etc etc...
Un exemple fameux de se code, serait de faire un system de lecteur d'image, ya toujours plein de gens qui poste des liens, bah avec ce genre de truc, on pourrait voir l'image sans même changer d'application :)
donkishock Messages postés 26 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 5 mars 2009
4 mars 2009 à 14:50
J'adore l'idée de "mixer" les protocoles, mais franchement pourrais tu expliquer à quoi cela sert de télécharger via protocole http depuis un mirc, sachant que tout le monde possède un navigateur web plus beau et rapide que mirc, peut etre ai je mal compris le but de cette remote et je m'en excuse, Par contre j' y vois un aspect pratique pour remplacer les xdcc par un systeme http, mais est ce que cela n'est pas plus "simple" avec un filezilla ou navigateur internet?
En conclusion ton code m'interesse mais j'aimerais plus d'exemples concrets de son utilisation. merci :)
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
16 févr. 2009 à 03:56
je viens de mettre a jour mon code, toutefois je viens de tester le ssl: ne marche pas !

et la je ne sais absolument pas comment l'implémenter, je vais voir cette semaine du coté du protocole https
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
13 févr. 2009 à 20:48
voila je viens de metre a jours, callback au programe, je finis de travailler sur la fonction de timer-callback mais je pensse que celle ci sera un peu plus problematique (pour gerer le multi appel simultané)
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
13 févr. 2009 à 03:37
Pour les variables a $null, je veux dire que :

//var %a ou //var %a = $null est strictement la même chose, idem pour /set et ce depuis que les commandes existent.

Pour ta boucle, j'avais mal lu je croyais que c'étais fait sur $sockbr et non $sockerr, donc en fait ça traduit une mauvaise methode, regarde l'aide sur /on on sockread, c'est expliqué comment géré le buffer si un seul /sockread ne suffit pas a le lire en entier.
J'aurais bien aimé que tu montres un exemple de ton bug sur $crlf histoire de confirmer si tu fais nawak ou pas :p

Content de voir que tu va mettre en place le call back, et c'est étonnant de sortir un truc comme ça quand on connait rien au protocole http :)
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
13 févr. 2009 à 03:14
Je suis parfaitement de ton avis:
le dialog est parfaitement inutile: pourquoi l'avoir fait alors ?
juste pour faire un "exemple" de code (temp de réalisation: 5 minutes montre en main)

ensuite je trouve ton idée de faire une seulle fonction de call_back plutôt judicieuse et compte la metre en pratique

pour la boucle:
while (!$sockerr)

si je mettais sockbr dans la condition de boucle elle faisais 0 itérations

quant a "User-Agent: CERN-LineMode/2.15 libwww/2.17" c'est juste que quand j'ai fait le développement je ne connaissais au début rien au protocole http, et le manuel d'exemples telnet que j'ai vu donnais ce paramètre, je vais le modifier :)

coté variables a $null : elles servent dans un cas précis: une variable du même nom à été "/Set" (du moins avec les anciennes version de mirc ca le faisais, je testerais demain aussi)

pour le problème de "progression" j'ai une solution, un timer qui appelle une fonction qui ferme le timer si le socket ou le dialog n'existe plus, je code ca demain avec le système de call_back :)
car bien évidement le but de ce code est de pouvoir être ré-utilisé par d'autres
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
13 févr. 2009 à 01:33
Bonné idée, mais j'y vois un paquet d'amélioration possible, rien que l'utilisation du code, c'est super mal foutu, tu devrais rendre ça beaucoup plus complet :

Changé le nom de la command principale, ainsi que sa syntaxe pour :

/getfile nom alias port ssl url destination
nom : nom de référence pour ce téléchargement
alias : alias de "callback", permettera d'intercepté tout les evenements liés a ce téléchargement
Le reste des arguments ne varie pas.

Ensuite donc, récupéré plein d'event liés au téléchargement par l'alias, c'est beaucoup plus simple :

alias call_back {
$1 = nom de référence du téléchargement
$2 = event
$3- : différent paramètre selon l'event
}

au niveau des différents event que tu peux proposer, je pense a 'begin' pour le début du transfert (histoire de permettre a l'user d'initialisé qqch, s'il le veut), a 'write' si tu viens d'écrire ds le fichier, 'error' si une erreur est survenu et complete pour la fin, les paramètre peuvent varié selon les evenements (message d'erreur, taille du fichier, nom du fichier...), n'hésite pas a ajouté d'autre evenement

Perso je pense que la partie dialog est inutile, qui plus est avec utilisation d'une vieille dll.
L'important n'est pas le dialog, les personnes le recoderont si il utilise ton code...

Niveau code (je ne juge pas la partie dialog) :

L'alias wbs.server.url peut s'écrire :
alias wbs.server.url return $gettok($$1,2,47)

Ligne 58 du site, je pense qu'il y a une erreur.
Pourquoi :
wsockwrite -n $sockname User-Agent: CERN-LineMode/2.15 libwww/2.17
je suis pas sur que ce soit super judicieux

Initialisé les variables a $null ou les setté a $null est inutile

# ;la ligne ci dessous est surtout la pour éviter le bug des crlf lié a mirc qui les efface comme un malpropre, a modiffier
# if ($bvar(&buffer,0,5).text != $crlf) hdel %table safemode

Euh ? mIRC efface rien du tout, c'est toi qui gère pas bien plutôt non :s ?

Quel est l'interet de cette ligne :
if ($sockbr == 0) break
puisque la boucle est de toute façon sur $sockbr ?

L'alias lastok est inutile, utilise $gettok(text,-1,C)

Bon boulot :), mais j'espère que tu va passé par un alias histoire de laissé le choix au user de pouvoir faire qqch avce derrière (tlm ne veux pas forcément d'un dialog avec mdx, dont moi).
Rejoignez-nous