begin process at 2010 02 09 17:47:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

AddOns

 > TELECHARGEMENT DE FICHIER PAR PROTOCOLE HTTP 1.0 VIA SOCKET

TELECHARGEMENT DE FICHIER PAR PROTOCOLE HTTP 1.0 VIA SOCKET


 Information sur la source

Note :
Aucune note
Catégorie :AddOns Classé sous :socket, http, telecharger, headers Niveau :Initié Date de création :12/02/2009 Date de mise à jour :07/07/2009 13:24:09 Vu :3 017

Auteur : hisoka2501

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


 Description

cet addon vous permet de télécharger un fichier depuis un serveur web sans utiliser de dll

utilisation:
wbs.webget nom-conection my-callback 80 0 http://www.google.fr/intl/fr_fr/images/logo.gif c:/file.gif

explication:
wbs.webget nom-conection [port] [ssl:0/1 (pas testé)] [url] [destination sur le disque]

pour la position courante du fichier: $sock(wbs.webget.nom-conection).rcvd (/help $sock)

pour toute information complémentaire sur le téléchargement en cour:
une hash table est créé sous le nom: wbs.webget.nom-conection avant l'ouverture du socket et est supprimée a la fermeture du socket (apres l'event du callback)

edit:
j'ai ajouté un système de callback, pour cela:
/getfile download my-callback 80 0 http://www.google.fr/intl/fr_fr/images/logo.gif c:/file.gif

si vous ne voulez pas de callback entrez "x" comme nom:
/getfile download x 80 0 http://www.google.fr/intl/fr_fr/images/logo.gif c:/file.gif

edit: j'ai écrit un fichier de manuel pour la fonction: http://www.wbsscript.free.fr/files/man/man%20webge -w32t.txt
en espérant que celui ci puisse vous être utile

Source

  • alias wbs.webget.version return 1.4
  • dialog wbs.webget {
  • title "Wbs.webget"
  • size -1 -1 285 228
  • option dbu
  • box "Info", 1, 3 3 277 77
  • text "Url", 2, 10 16 25 8
  • edit "", 3, 41 14 234 10, autohs
  • text "Destination", 4, 10 27 29 8
  • edit "", 5, 41 25 234 10
  • text "port", 6, 10 37 25 8
  • edit "80", 7, 41 36 50 10
  • button "Go", 8, 165 210 37 12
  • box "Debug", 9, 3 81 277 124
  • list 10, 7 90 270 110, size
  • text "", 11, 9 68 267 8
  • check "Mode SSL", 12, 93 36 37 10
  • text "CallBack:", 13, 9 58 190 8
  • text "", 14, 201 58 75 8
  • button "Stop", 15, 125 210 37 12
  • button "Pause", 16, 85 210 37 12
  • check "headers only", 17, 134 36 46 10
  • check "Cookie", 18, 187 36 29 10
  • edit "", 19, 217 36 58 10, autohs
  • text "", 20, 4 212 76 8
  • }
  • on *:dialog:wbs.webget:*:*:{
  • if ($devent == init) {
  • mdxinit
  • wbs.mdx.make.pbar $dname 11:0-0-100
  • bdid 19
  • if ($sock(wbs.webget.download)) {
  • .timerweb.webget.refresh 0 1 wbs.webget.timer.refresh wbs.webget.download $dname 11
  • idid 11 1 0 $hget(wbs.webget.download,Content-Length)
  • }
  • adid 10 Engine version: $wbs.webget.version
  • if (!$sslready) {
  • bdid 12
  • udid 12
  • adid 10 Impossible d'utiliser le mode ssl:
  • adid 10 Installez openssl-0.9.8i-setup.exe
  • }
  • }
  • elseif ($devent == sclick) {
  • var %sockname = wbs.webget.download , %table = wbs.webget.download
  • if ($did == 8) {
  • if (!$did(3) || !$did(5)) {
  • w.err Impossible de satisfaire la requete: arguments manquant.
  • return
  • }
  • rdid 10
  • wbs.webget download wbs.webget.callback $did(7) $did(12).state $did(3) $iif(!$did(17).state,$did(5),x)
  • .timerweb.webget.refresh 0 1 wbs.webget.timer.refresh wbs.webget.download $dname 11
  • writeini $wcfg webget lasturl $did(3)
  • }
  • elseif ($did == 12) odid 7 1 $iif($did(12).state,443,80)
  • elseif ($did == 18) $iif($did(18).state,edid,bdid) 19
  • elseif ($did == 15) {
  • if ($sock(wbs.webget.download)) {
  • wbs.webget.callback wbs.webget.download close $ctime $calc($ctime - $hget(%table,open)) user abord
  • sockclose wbs.webget.download
  • hfree %table
  • adid 10 Connection was closed by user
  • }
  • else adid 10 Unable to close socket: no such socket
  • }
  • elseif ($did == 16) {
  • if ($version < 6.17) {
  • adid 10 Unable to use "pause" : you're version of mirc is $version and need to be at last 6.17 or newer
  • return
  • }
  • if ($sock(wbs.webget.download)) {
  • if ($sock(%sockname).pause) adid 10 The socket is already in "pause" mode: trying resume
  • else adid 10 Socket was put in "pause" mode: done.
  • sockpause $iif($sock(%sockname).pause,-r) %sockname
  • }
  • else adid 10 Unable to use "pause" : no such socket
  • }
  • }
  • elseif ($devent == dclick) {
  • if ($did == 10) wecho $did(10).seltext
  • }
  • elseif (($devent == edit) && ($did == 3)) odid 5 1 $replace($gettok($did(3),-1,47),$+($chr(37),20),_)
  • }
  • alias wbs.webget.callback {
  • ;ici un exemple concret d'utilisation de la fonction callback
  • var %dname = wbs.webget , %table = wbs.webget.download
  • if ($dialog(%dname).title) {
  • did -a %dname 10 callback: $1-
  • did -o %dname 13 1 CallBack: $2-
  • if (($3 == content-lenght) && ($4)) {
  • if ($dialog(%dname).title) {
  • did -i %dname 11 1 0 $4
  • did -o %dname 14 1 / $wsize($4)
  • did -a %dname 11 0
  • }
  • }
  • elseif ($2 == ierror) {
  • if ($3 == 1) || ($3 == 1) .remove $qt($hget(%table,file-temp))
  • }
  • elseif ($2 == pre-connect) {
  • ;ici un exemple de personalisation du user agent
  • hadd -m %table user-agent Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/2.0.0.14
  • if ($did(%dname,18).state) hadd -m %table cookie $$did(%dname,19)
  • }
  • elseif ($2 == close) {
  • var %value = $hget(wbs.webget.download,content-length)
  • did -a %dname 11 %value
  • did -o %dname 14 1 $wsize(%value) / $wsize(%value)
  • did -a %dname 10 Connection closed.
  • did -a %dname 10 Conection duration: $duration($4) $calc($5 % 1000) ms
  • }
  • }
  • }
  • alias wbs.webget.timer.refresh {
  • ;utilisation: /timer 0 1 wbs.webget.timer.refresh [sockname] [dialogue]
  • if (($sock($1)) && ($dialog($2).title)) {
  • var %max = $hget(wbs.webget. $+ $gettok($1,3-,46),Content-Length)
  • did -a $2 11 $sock($1).rcvd 0 %max
  • did -o $2 14 1 $wsize($sock($1).rcvd) / $wsize(%max)
  • did -o $2 20 1 Average speed: $wsize($calc($sock($1).rcvd / $sock($1).to)) $+ /s
  • }
  • else .timerweb.webget.refresh off
  • }
  • ;################## FIN DE L'EXEMPLE DU DIALOGUE ET DEBUT DU CODE UTILE ##################
  • alias wbs.server.url return $gettok($$1,2,47)
  • alias wbs.webget.showstats {
  • var %n = $sock(wbs.webget.*,0)
  • if (!%n) wecho No socket.
  • while (%n > 0) {
  • var %sname = $sock(wbs.webget.*,%n) , %rcvd = $sock(%sname).rcvd , %size = $hget(%sname,content-length)
  • wecho $qt(%sname) $+($chr(91),type: $sock(%sname).type,$chr(93)) $+($chr(91),port: $sock(%sname).port,$chr(93)) $br(ip: $sock(%sname).ip) $&
  • $br($wsize(%rcvd) / $wsize(%size)) $br($round($calc(%rcvd / %size * 100),2) $+ $chr(37)) $br(from: $duration($sock(%sname).to) ) $&
  • $br(pause: $iif($sock(%sname).pause,yes,no)) $br(ssl: $iif($sock(%sname).ssl,yes,no))
  • dec %n
  • }
  • }
  • ;ici je préfere faire une alias vers mon alias car je préfere employer mon alias car "getfile" peu etre un nom attribué dans d'autres scripts
  • alias getfile {
  • if ($1) wbs.webget $1-
  • else wbs.webget.showstats
  • }
  • alias -l br return $+($chr(91),$1-,$chr(93))
  • alias wbs.webget {
  • ;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
  • ;il est possible de spécifier un user-agent personalisé en l'entran manuelement dans la table AVANT l'appel de la commande wbs.webget ou getfile
  • ;syntaxe: wbs.webget.[nom-de-la-conection] user-agent
  • ;exemple: hadd -m %table wbs.webget.download user-agent mIrc $version
  • if ($5) {
  • var %table = wbs.webget. $+ $1
  • ;ici je préfere aussi laisser a l'utilisateur de pouvoir formuler lui même sa requette GET s'il le shouaite
  • if (!$hget(%table,get)) hadd -m %table get $5
  • if ($6 != x) hadd -m %table file $6-
  • hadd -m %table mode 0
  • hadd -m %table ctime $ctime
  • hadd -m %table name $1
  • if (!$hget(%table,redirects-left)) hadd -m %table redirects-left 16
  • if (!$hget(%table,file-temp)) hadd -m %table file-temp $1 $+ .temp
  • if ($exists($hget(%table,file-temp))) callback %table ierror 1 $qt($hget(%table,file-temp)) already exists
  • if ($2 != x) hadd %table callback $2
  • if ($sock(wbs.webget. $+ $1)) {
  • callback wbs.webget. $+ $1 info hard-sockclose
  • sockclose wbs.webget. $+ $1
  • }
  • callback %table pre-connect
  • sockopen $iif($4 == 1,-e) $+(wbs.webget.,$1) $wbs.server.url($5) $3
  • }
  • else wecho $sname error: wbs.webget: syntax: /wbs.webget [name] [callback alias ("x" if not)] [port] [ssl (0/1)] [url] [destination]
  • }
  • alias wsockwrite {
  • sockwrite $1-
  • if ($hget($2,callback)) $v1 $2 sockwrite $1-
  • }
  • alias -l callback {
  • ;utilisation: callback [htable] alias de callback
  • ;todo permrete l'utilisation de plusieures fonction de callback succesives séparées par des ","
  • if (($hget($1,callback)) && ($isalias($hget($1,callback)))) $hget($1,callback) $1-
  • }
  • alias -l sname return wbs.webget
  • on *:sockopen:wbs.webget.*:{
  • var %table = $sockname
  • hadd -m %table open $ctime $ticks
  • callback %table info open $ctime $ticks
  • callback %table info serverip $sock($sockname).ip $sock($sockname).port
  • if ($hget(%table,post)) wsockwrite -n $sockname POST $v1 HTTP/ $+ $iif($hget(%table,http-version),$v1,1.0)
  • else wsockwrite -n $sockname GET / $+ $gettok($hget(%table,get),3-,47)) HTTP/ $+ $iif($hget(%table,http-version),$v1,1.0)
  • if ($hget(%table,Authorization)) wsockwrite -n $sockname Authorization: $v1
  • if (!$hget(%table,no-referer)) wsockwrite -n $sockname Referer: $iif($hget(%table,referer),$v1,http://wbsscript.free.fr/)
  • if ($hget(%table,accept)) wsockwrite -n $sockname Accept: $v1
  • if ($hget(%table,connection)) wsockwrite -n $sockname Connection: $v1
  • if ($hget(%table,cache-control)) wsockwrite -n $sockname Cache-Control: $v1
  • if ($hget(%table,cookie)) wsockwrite -n $sockname Cookie: $v1
  • if (!$hget(%table,no-user-agent)) wsockwrite -n $sockname User-Agent: $iif($hget(%table,user-agent),$v1,CERN-LineMode/2.15 libwww/2.17)
  • wsockwrite -n $sockname Host: $iif($hget(%table,host),$v1,$wbs.server.url($hget(%table,get))) $+ $crlf $+ $crlf
  • }
  • ;ici le but de l'interpreteur est de clarifier le code dans la fonction du socket, le socket contien cependent la gestion des erreures
  • alias wbs.webget.interpreter {
  • var %buffer = $2- , %table = $1 , %errors = 400;404;500;403, %err = 0
  • tokenize 32 $2-
  • if ($gettok($1,1,47) == HTTP) {
  • hadd -m %table http $2-
  • callback %table http $2-
  • }
  • elseif ($1 == Content-Length:) {
  • hadd -m %table Content-Length $2
  • callback %table info content-lenght $2
  • }
  • elseif ($1 == Set-Cookie:) {
  • hadd -m %table cookie $2-
  • callback %table cookie $2-
  • }
  • elseif ($1 == Location:) {
  • var %location = $2
  • if (($left(%location,7) != http://) && ($left(%location,8) != https://)) var %location = $+(http://,$sock($sockname).ip,$2)
  • var %arguments = $hget(%table,name) $iif($hget(%table,callback),$v1,x) $sock($sockname).port $iif($sock($sockname).ssl,1,0) %location $iif($hget(%table,file),$v1,x)
  • sockclose $sockname
  • callback %table error $hget(%table,http) $2-
  • hdec %table redirects-left
  • if ($hget(%table,redirects-left) <= 0) {
  • callback %table ierror 2 too many redirections
  • hfree %table
  • return
  • }
  • hadd -m %table get %location
  • callback %table reconnect %arguments
  • wbs.webget %arguments
  • }
  • }
  • on *:sockread:wbs.webget.*:{
  • var %buffer = $null , %table = $sockname , %errors = 400;404;500;403, %err = 0 , %writefile = $qt($hget(%table,file-temp))
  • while ((!$sockerr) && (!%err)) {
  • if ($hget(%table,mode) == 0) {
  • sockread %buffer
  • tokenize 32 %buffer
  • wbs.webget.interpreter $sockname %buffer
  • callback %table buffer %buffer
  • if ($1 == Location:) inc %err
  • elseif ($istok(%errors,$2,59)) {
  • sockclose $sockname
  • var %err = $2
  • callback %table error %err $calc($ctime - $hget(%table,start-time))
  • hfree %table
  • break
  • }
  • elseif (!%buffer) {
  • ;ce passage marque la fin des headers intervient juste avant le debut du transfer binaire
  • if (($hget(%table,Content-Length) == 0) || (!$hget(%table,file))) {
  • callback %table close $ctime $calc($ctime - $hget(%table,ctime)) $ticks no-data
  • sockclose $sockname
  • hfree %table
  • break
  • }
  • hadd -m %table mode 1
  • hadd -m %table safemode 1
  • }
  • }
  • elseif ($hget(%table,mode) == 1) {
  • ;mode binaire (traitement)
  • sockread &buffer
  • ;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) {
  • if ($hget(%table,safemode)) {
  • hdel %table safemode
  • callback %table info start $ctime
  • hadd -m %table start-time $ctime
  • }
  • }
  • if (!$hget(%table,safemode)) {
  • ;ici je préfere remetre une sous boucle pour ne pas avoir a ré-interpreter toutes les autres conditions
  • bwrite %writefile -1 &buffer
  • while ((!$sockerr) && (!%err)) {
  • sockread &buffer
  • bwrite %writefile -1 &buffer
  • if ($sockbr == 0) break
  • }
  • }
  • }
  • if ($sockbr == 0) break
  • }
  • if ($sockerr) callback %table error sockerr $sockerr
  • }
  • on *:sockclose:wbs.webget.*:{
  • var %table = $sockname , %file = $qt($hget(%table,file))
  • if ($exists(%file)) .remove %file
  • if ($hget(%table,mode)) .rename $qt($iif($hget(%table,file-temp),$v1,$+($mircdir,$sockname,.temp))) %file
  • callback %table file %file
  • callback %table close $ctime $calc($ctime - $hget(%table,open)) $ticks finished
  • hfree %table
  • }
  • alias wbs.webget.timer.callback {
  • ;utilisation: /.timerwbs.webget.timer.callback 0 1 wbs.webget.timer.callback [sockname] [alias]
  • ;effet: appele [alias] et retourne: [sockname] [position actuelle] [durée de la conection]
  • if (($sock($1)) && ($isalias($2))) {
  • $2 $sock($1).rcvd $hget(wbs.webget. $+ $gettok($1,3-,46),Content-Length)
  • if (!$timer(wbs.webget.timer.callback)) .timerwbs.webget.timer.callback 0 1 wbs.webget.timer.callback $1 $2
  • }
  • else .timerwbs.webget.timer.callback off
  • }
  • ;#aliases de compatibilitées
  • alias -l wbs.mdx.make.pbar {
  • ;usage: wbs.mdx.make.pbar $dname id:0-0-100
  • ;values: defaut-debut-fin
  • var %dname = $1 , %target = $gettok($2,1,58) , %values = $replace($gettok($2,2,58),-,$chr(32))
  • if ($dialog(%dname).title) {
  • wbs.mdx SetControlMDX %dname %target ProgressBar > $wdll(ctl_gen.mdx)
  • did -i %dname %target 1 $gettok(%values,2-,32)
  • did -a %dname %target $gettok(%values,1,32)
  • }
  • }
  • ;alias de compatibilitée pour exportation du code
  • alias -l wdll return $qt($+($scriptdir,dlls\,$1))
  • alias -l w.err adid 10 $1-
  • alias -l idid did -i $dname $1-
  • alias -l adid did -a $dname $1-
  • alias -l rdid did -r $dname $1-
  • alias -l odid did -o $dname $1-
  • alias -l bdid did -b $dname $1-
  • alias -l udid did -u $dname $1-
  • alias -l wecho echo -a $1-
  • alias -l wsize {
  • if ($1 !isnum 0-) return n/a
  • else return $replace($lower($bytes($1-,3).suf $+ $iif($right($bytes($1-,3).suf,1) !== b,b)),b,b)
  • }
  • ;uniquement pour le gui:
  • alias -l wbs.mdx.make.pbar {
  • ;usage: wbs.mdx.make.pbar $dname id:0-0-100
  • ;values: defaut-debut-fin
  • var %dname = $1 , %target = $gettok($2,1,58) , %values = $replace($gettok($2,2,58),-,$chr(32))
  • if ($dialog(%dname).title) {
  • wbs.mdx SetControlMDX %dname %target ProgressBar > $wdll(ctl_gen.mdx)
  • did -i %dname %target 1 $gettok(%values,2-,32)
  • did -a %dname %target $gettok(%values,1,32)
  • }
  • }
alias wbs.webget.version return 1.4

dialog wbs.webget {
  title "Wbs.webget"
  size -1 -1 285 228
  option dbu
  box "Info", 1, 3 3 277 77
  text "Url", 2, 10 16 25 8
  edit "", 3, 41 14 234 10, autohs
  text "Destination", 4, 10 27 29 8
  edit "", 5, 41 25 234 10
  text "port", 6, 10 37 25 8
  edit "80", 7, 41 36 50 10
  button "Go", 8, 165 210 37 12
  box "Debug", 9, 3 81 277 124
  list 10, 7 90 270 110, size
  text "", 11, 9 68 267 8
  check "Mode SSL", 12, 93 36 37 10
  text "CallBack:", 13, 9 58 190 8
  text "", 14, 201 58 75 8
  button "Stop", 15, 125 210 37 12
  button "Pause", 16, 85 210 37 12
  check "headers only", 17, 134 36 46 10
  check "Cookie", 18, 187 36 29 10
  edit "", 19, 217 36 58 10, autohs
  text "", 20, 4 212 76 8
}

on *:dialog:wbs.webget:*:*:{
  if ($devent == init) {
    mdxinit
    wbs.mdx.make.pbar $dname 11:0-0-100
    bdid 19
    if ($sock(wbs.webget.download)) {
      .timerweb.webget.refresh 0 1 wbs.webget.timer.refresh wbs.webget.download $dname 11
      idid 11 1 0 $hget(wbs.webget.download,Content-Length)
    }
    adid 10 Engine version: $wbs.webget.version
    if (!$sslready) {
      bdid 12
      udid 12
      adid 10 Impossible d'utiliser le mode ssl:
      adid 10 Installez openssl-0.9.8i-setup.exe
    }
  }
  elseif ($devent == sclick) {
    var %sockname = wbs.webget.download , %table = wbs.webget.download
    if ($did == 8) {
      if (!$did(3) || !$did(5)) {
        w.err Impossible de satisfaire la requete: arguments manquant.
        return
      }
      rdid 10
      wbs.webget download wbs.webget.callback $did(7) $did(12).state $did(3) $iif(!$did(17).state,$did(5),x)
      .timerweb.webget.refresh 0 1 wbs.webget.timer.refresh wbs.webget.download $dname 11
      writeini $wcfg webget lasturl $did(3)
    }
    elseif ($did == 12) odid 7 1 $iif($did(12).state,443,80)
    elseif ($did == 18) $iif($did(18).state,edid,bdid) 19
    elseif ($did == 15) {
      if ($sock(wbs.webget.download)) {
        wbs.webget.callback wbs.webget.download close $ctime $calc($ctime - $hget(%table,open)) user abord
        sockclose wbs.webget.download
        hfree %table
        adid 10 Connection was closed by user
      }
      else adid 10 Unable to close socket: no such socket
    }
    elseif ($did == 16) {
      if ($version < 6.17) {
        adid 10 Unable to use "pause" : you're version of mirc is $version and need to be at last 6.17 or newer
        return
      }
      if ($sock(wbs.webget.download)) {
        if ($sock(%sockname).pause) adid 10 The socket is already in "pause" mode: trying resume
        else adid 10 Socket was put in "pause" mode: done.
        sockpause $iif($sock(%sockname).pause,-r) %sockname
      }
      else adid 10 Unable to use "pause" : no such socket
    }
  }
  elseif ($devent == dclick) {
    if ($did == 10) wecho $did(10).seltext
  }
  elseif (($devent == edit) && ($did == 3)) odid 5 1 $replace($gettok($did(3),-1,47),$+($chr(37),20),_)
}
alias wbs.webget.callback {
  ;ici un exemple concret d'utilisation de la fonction callback
  var %dname = wbs.webget , %table = wbs.webget.download
  if ($dialog(%dname).title) {
    did -a %dname 10 callback: $1-
    did -o %dname 13 1 CallBack: $2-
    if (($3 == content-lenght) && ($4)) {
      if ($dialog(%dname).title) {
        did -i %dname 11 1 0 $4
        did -o %dname 14 1 / $wsize($4)
        did -a %dname 11 0
      }
    }
    elseif ($2 == ierror) {
      if ($3 == 1) || ($3 == 1) .remove $qt($hget(%table,file-temp))
    }
    elseif ($2 == pre-connect) {
      ;ici un exemple de personalisation du user agent
      hadd -m %table user-agent Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/2.0.0.14
      if ($did(%dname,18).state) hadd -m %table cookie $$did(%dname,19)
    }
    elseif ($2 == close) {
      var %value = $hget(wbs.webget.download,content-length)
      did -a %dname 11 %value
      did -o %dname 14 1 $wsize(%value) / $wsize(%value)
      did -a %dname 10 Connection closed.
      did -a %dname 10 Conection duration: $duration($4) $calc($5 % 1000) ms
    }
  }
}
alias wbs.webget.timer.refresh {
  ;utilisation: /timer 0 1 wbs.webget.timer.refresh [sockname] [dialogue]
  if (($sock($1)) && ($dialog($2).title)) {
    var %max = $hget(wbs.webget. $+ $gettok($1,3-,46),Content-Length)
    did -a $2 11 $sock($1).rcvd 0 %max
    did -o $2 14 1 $wsize($sock($1).rcvd) / $wsize(%max)
    did -o $2 20 1 Average speed: $wsize($calc($sock($1).rcvd / $sock($1).to)) $+ /s
  }
  else .timerweb.webget.refresh off
}
;################## FIN DE L'EXEMPLE DU DIALOGUE ET DEBUT DU CODE UTILE ##################
alias wbs.server.url return $gettok($$1,2,47)
alias wbs.webget.showstats {
  var %n = $sock(wbs.webget.*,0)
  if (!%n) wecho No socket.
  while (%n > 0) {
    var %sname = $sock(wbs.webget.*,%n) , %rcvd = $sock(%sname).rcvd , %size = $hget(%sname,content-length)
    wecho $qt(%sname) $+($chr(91),type: $sock(%sname).type,$chr(93)) $+($chr(91),port: $sock(%sname).port,$chr(93)) $br(ip: $sock(%sname).ip)  $&
      $br($wsize(%rcvd) / $wsize(%size)) $br($round($calc(%rcvd / %size * 100),2) $+ $chr(37)) $br(from: $duration($sock(%sname).to) ) $&
      $br(pause: $iif($sock(%sname).pause,yes,no)) $br(ssl: $iif($sock(%sname).ssl,yes,no))
    dec %n
  }
}
;ici je préfere faire une alias vers mon alias car je préfere employer mon alias car "getfile" peu etre un nom attribué dans d'autres scripts
alias getfile {
  if ($1) wbs.webget $1-
  else wbs.webget.showstats
}
alias -l br return $+($chr(91),$1-,$chr(93))
alias wbs.webget {
  ;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
  ;il est possible de spécifier un user-agent personalisé en l'entran manuelement dans la table AVANT l'appel de la commande wbs.webget ou getfile
  ;syntaxe: wbs.webget.[nom-de-la-conection] user-agent
  ;exemple: hadd -m %table wbs.webget.download user-agent mIrc $version
  if ($5) {
    var %table = wbs.webget. $+ $1
    ;ici je préfere aussi laisser a l'utilisateur de pouvoir formuler lui même sa requette GET s'il le shouaite
    if (!$hget(%table,get)) hadd -m %table get $5
    if ($6 != x) hadd -m %table file $6-
    hadd -m %table mode 0
    hadd -m %table ctime $ctime
    hadd -m %table name $1
    if (!$hget(%table,redirects-left)) hadd -m %table redirects-left 16
    if (!$hget(%table,file-temp)) hadd -m %table file-temp $1 $+ .temp
    if ($exists($hget(%table,file-temp))) callback %table ierror 1 $qt($hget(%table,file-temp)) already exists
    if ($2 != x) hadd %table callback $2
    if ($sock(wbs.webget. $+ $1)) {
      callback wbs.webget. $+ $1 info hard-sockclose
      sockclose wbs.webget. $+ $1
    }
    callback %table pre-connect
    sockopen $iif($4 == 1,-e) $+(wbs.webget.,$1) $wbs.server.url($5) $3
  }
  else wecho $sname error: wbs.webget: syntax: /wbs.webget [name] [callback alias ("x" if not)] [port] [ssl (0/1)] [url] [destination]
}
alias wsockwrite {
  sockwrite $1-
  if ($hget($2,callback)) $v1 $2 sockwrite $1-
}
alias -l callback {
  ;utilisation: callback [htable] alias de callback
  ;todo permrete l'utilisation de plusieures fonction de callback succesives séparées par des ","
  if (($hget($1,callback)) && ($isalias($hget($1,callback)))) $hget($1,callback) $1-
}
alias -l sname return wbs.webget
on *:sockopen:wbs.webget.*:{
  var %table = $sockname
  hadd -m %table open $ctime $ticks
  callback %table info open $ctime $ticks
  callback %table info serverip $sock($sockname).ip $sock($sockname).port
  if ($hget(%table,post)) wsockwrite -n $sockname POST $v1 HTTP/ $+ $iif($hget(%table,http-version),$v1,1.0)
  else wsockwrite -n $sockname GET / $+ $gettok($hget(%table,get),3-,47)) HTTP/ $+ $iif($hget(%table,http-version),$v1,1.0)
  if ($hget(%table,Authorization)) wsockwrite -n $sockname Authorization: $v1
  if (!$hget(%table,no-referer)) wsockwrite -n $sockname Referer: $iif($hget(%table,referer),$v1,http://wbsscript.free.fr/)
  if ($hget(%table,accept)) wsockwrite -n $sockname Accept: $v1
  if ($hget(%table,connection)) wsockwrite -n $sockname Connection: $v1
  if ($hget(%table,cache-control)) wsockwrite -n $sockname Cache-Control: $v1  
  if ($hget(%table,cookie)) wsockwrite -n $sockname Cookie: $v1
  if (!$hget(%table,no-user-agent)) wsockwrite -n $sockname User-Agent: $iif($hget(%table,user-agent),$v1,CERN-LineMode/2.15 libwww/2.17)
  wsockwrite -n $sockname Host: $iif($hget(%table,host),$v1,$wbs.server.url($hget(%table,get))) $+ $crlf $+ $crlf

}
;ici le but de l'interpreteur est de clarifier le code dans la fonction du socket, le socket contien cependent la gestion des erreures
alias wbs.webget.interpreter {
  var %buffer = $2- , %table = $1 , %errors = 400;404;500;403, %err = 0
  tokenize 32 $2-
  if ($gettok($1,1,47) == HTTP) {
    hadd -m %table http  $2-
    callback %table http $2-
  }
  elseif ($1 == Content-Length:) {
    hadd -m %table Content-Length $2
    callback %table info content-lenght $2
  }
  elseif ($1 == Set-Cookie:) {
    hadd -m %table cookie $2-
    callback %table cookie $2-
  }
  elseif ($1 == Location:) {
    var %location = $2
    if (($left(%location,7) != http://) && ($left(%location,8) != https://)) var %location = $+(http://,$sock($sockname).ip,$2)
    var %arguments = $hget(%table,name) $iif($hget(%table,callback),$v1,x) $sock($sockname).port $iif($sock($sockname).ssl,1,0) %location $iif($hget(%table,file),$v1,x)
    sockclose $sockname
    callback %table error $hget(%table,http) $2-
    hdec %table redirects-left
    if ($hget(%table,redirects-left) <= 0) {
      callback %table ierror 2 too many redirections
      hfree %table
      return
    }
    hadd -m %table get %location
    callback %table reconnect %arguments
    wbs.webget %arguments
  }
}

on *:sockread:wbs.webget.*:{
  var %buffer = $null , %table = $sockname , %errors = 400;404;500;403, %err = 0 , %writefile = $qt($hget(%table,file-temp))
  while ((!$sockerr) && (!%err)) {
    if ($hget(%table,mode) == 0) {
      sockread %buffer
      tokenize 32 %buffer
      wbs.webget.interpreter $sockname %buffer
      callback %table buffer %buffer
      if ($1 == Location:) inc %err
      elseif ($istok(%errors,$2,59)) {
        sockclose $sockname
        var %err = $2
        callback %table error %err $calc($ctime - $hget(%table,start-time))
        hfree %table
        break
      }
      elseif (!%buffer) {
        ;ce passage marque la fin des headers intervient juste avant le debut du transfer binaire
        if (($hget(%table,Content-Length) == 0) || (!$hget(%table,file))) {
          callback %table close $ctime $calc($ctime - $hget(%table,ctime)) $ticks no-data
          sockclose $sockname
          hfree %table
          break
        }
        hadd -m %table mode 1
        hadd -m %table safemode 1
      }
    }
    elseif ($hget(%table,mode) == 1) {
      ;mode binaire (traitement)
      sockread &buffer
      ;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) {
        if ($hget(%table,safemode)) {
          hdel %table safemode
          callback %table info start $ctime
          hadd -m %table start-time $ctime
        }
      }
      if (!$hget(%table,safemode)) {
        ;ici je préfere remetre une sous boucle pour ne pas avoir a ré-interpreter toutes les autres conditions
        bwrite %writefile -1 &buffer
        while ((!$sockerr) && (!%err)) {
          sockread &buffer
          bwrite %writefile -1 &buffer
          if ($sockbr == 0) break
        }
      }
    }
    if ($sockbr == 0) break
  }
  if ($sockerr) callback %table error sockerr $sockerr
}
on *:sockclose:wbs.webget.*:{
  var %table = $sockname , %file = $qt($hget(%table,file))
  if ($exists(%file)) .remove %file
  if ($hget(%table,mode)) .rename $qt($iif($hget(%table,file-temp),$v1,$+($mircdir,$sockname,.temp))) %file
  callback %table file %file
  callback %table close $ctime $calc($ctime - $hget(%table,open)) $ticks finished
  hfree %table
}
alias wbs.webget.timer.callback {
  ;utilisation: /.timerwbs.webget.timer.callback 0 1  wbs.webget.timer.callback [sockname] [alias]
  ;effet: appele [alias] et retourne: [sockname] [position actuelle] [durée de la conection]
  if (($sock($1)) && ($isalias($2))) {
    $2 $sock($1).rcvd $hget(wbs.webget. $+ $gettok($1,3-,46),Content-Length)
    if (!$timer(wbs.webget.timer.callback)) .timerwbs.webget.timer.callback 0 1  wbs.webget.timer.callback $1 $2
  }
  else .timerwbs.webget.timer.callback off
}

;#aliases de compatibilitées
alias -l wbs.mdx.make.pbar {
  ;usage: wbs.mdx.make.pbar $dname id:0-0-100
  ;values: defaut-debut-fin
  var %dname = $1 , %target = $gettok($2,1,58) , %values = $replace($gettok($2,2,58),-,$chr(32))
  if ($dialog(%dname).title) {
    wbs.mdx SetControlMDX %dname %target ProgressBar > $wdll(ctl_gen.mdx)
    did -i %dname %target 1 $gettok(%values,2-,32)
    did -a %dname %target $gettok(%values,1,32)
  }
}

;alias de compatibilitée pour exportation du code
alias -l wdll return $qt($+($scriptdir,dlls\,$1))
alias -l w.err adid 10 $1-
alias -l idid did -i $dname $1-
alias -l adid did -a $dname $1-
alias -l rdid did -r $dname $1-
alias -l odid did -o $dname $1-
alias -l bdid did -b $dname $1-
alias -l udid did -u $dname $1-
alias -l wecho echo -a $1-
alias -l wsize {
  if ($1 !isnum 0-) return n/a 
  else return $replace($lower($bytes($1-,3).suf $+ $iif($right($bytes($1-,3).suf,1) !== b,b)),b,b)
}
;uniquement pour le gui:
alias -l wbs.mdx.make.pbar {
  ;usage: wbs.mdx.make.pbar $dname id:0-0-100
  ;values: defaut-debut-fin
  var %dname = $1 , %target = $gettok($2,1,58) , %values = $replace($gettok($2,2,58),-,$chr(32))
  if ($dialog(%dname).title) {
    wbs.mdx SetControlMDX %dname %target ProgressBar > $wdll(ctl_gen.mdx)
    did -i %dname %target 1 $gettok(%values,2-,32)
    did -a %dname %target $gettok(%values,1,32)
  }
}



 Conclusion

je ne met pas les aliases "mdxinit" et "mdx" car celles ci sont déjà tellement répandues que je préfère ne pas les mettre pour éviter des confits

#FACULTATIF ! (interface uniquement: useless)
placez les dlls de mdx dans le dossier "dlls/" la ou se trouve le script, si vous les avez deja ailleurs moddifiez la fonction "wdll" (a la la fin du code)
(je met ca car chez moi le wdll fait appels a bien trop de sous fonction (utilisation d'un cache)

je suis bien évidement ouvert a toute idée d'amélioration


 Historique

13 février 2009 20:34:22 :
ajout du systeme de callback épuration du code séparation du dialog et du coeur du script
14 février 2009 14:05:54 :
corection d'un bug majeur qui freezai mirc en boucle infinie lors d'une erreur du serveur (404/400/503/403...) La bare de progression du dialogue fonctione a present
16 février 2009 03:51:32 :
ajout de l'evant "buffer" dans la fonction de callback pour permettre plus de possibilités ajout d'un bouton "stop" dans le dialogue pour couper un téléchargement ajout d'un bouton "pause" pour mettre en pause/reprendre un téléchargement (sous réserve que le serveur le supporte)
16 février 2009 14:53:10 :
ajout d'une alias oubliée: wsize
23 février 2009 04:06:54 :
gestion du cas de l'erreur 302 (données déménagées de serveur) et suivis du lien indiqué par le serveur
27 février 2009 18:41:33 :
optimisation du code les sockwrite passent maintenant par la fonction de callback ajout de l'alias "w.err" oubliée ajout d'un interpréteur séparé du socket pour clarifier le code il est désormais possible de sépcifier manuelement la requete GET à envoyer et de changer l'user agent (voir manuel) à volontée
10 mars 2009 19:36:35 :
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 optimisation de la boucle de la partie binaire ajout d'un parseur externe au on *:sockread pour plus de claretée dans le code
14 mars 2009 05:29:54 :
correction d'un bug (espace en trop dans le headers "host") qui retournais une erreur 400 sur certains serveurs, ajout des évènements "pre-connect" pour les moddif des paramètres avant ouverture du socket, événement "file" qui retourne le chemin du fichier sur le disque dur, possibilités de spécifier un cookie (voir manuel), évement "cookie" lors de la recepetion de celui par le serveur
13 mai 2009 16:00:24 :
correction d'une erreur a la ligne 291 lorsque le dossier ou mirc se trouve contenais un espace, le mode ssl fonctione (requier l'installation de openssl avant), rajout des aliases oubliées, protection contre les erreur 302 et 301 de la part du serveur (quand ce dernier redirigeais infiniement): désormais 15 redirection maxi (parametrable via la htable), gestion des liens relatifs pour les redirection du serveur (301/302)
07 juillet 2009 13:24:09 :
ajout de la possibilitée d'envoyer des requetes via POST (au lieu de get) , possibilitée de spécifier un "accept" et aussi de pouvoir changer le "referer" , correction d'un bug lorsque le chemin de destination contenais des espaces.

 Sources du même auteur

SERVEUR FTP
ALIASES POUR FASCILITER L'USAGE DE MDX (FRAMEWORK)
Source avec Zip Source avec une capture MTOOLS : L'OUTIL DE MENCODER/MPLAYER
PENDU EN @WINDOW
JEU DE LA DEVINETTE

 Sources de la même categorie

BLACKLIST PSEUDOS/MASKS par usurpateur
Source avec une capture [XCHAT] ANTI KICK / AWAY C++ par GeroXXXX
JEU DU CODE par alanpersonproject
SERVEUR FTP par hisoka2501
BANNIR LES AGES, LES HOMMES, LES FEMMES ET PSEUDO AVEC CHIFF... par cougar_du_havre

 Sources en rapport avec celle ci

SERVEUR FTP par hisoka2501
Source avec une capture ALIAS POUR TELECHARGER UNE VIDEO SUR YOUTUBE (MISE A JOUR V1... par WorldDMT
Source avec une capture QUOTES BASH ET BASHFR par Flyswat
Source avec Zip Source avec une capture PACMAN ONLINE - 4 JOUEURS par wims
Source avec Zip TELECHARGEMENT DE PACKS EN SÉRIE SUR XDCC (SEULEMENT COMPATI... par VorteX_on

Commentaires et avis

Commentaire de wims le 13/02/2009 01:33:03

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).

Commentaire de hisoka2501 le 13/02/2009 03:14:29

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

Commentaire de wims le 13/02/2009 03:37:49

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 :)

Commentaire de hisoka2501 le 13/02/2009 20:48:55

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é)

Commentaire de hisoka2501 le 16/02/2009 03:56:04

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

Commentaire de donkishock le 04/03/2009 14:50:19

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 :)

Commentaire de wims le 04/03/2009 15:32:34

"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 :)

Commentaire de donkishock le 05/03/2009 11:10:35

"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 ;)

Commentaire de hisoka2501 le 09/03/2009 04:07:09

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

Commentaire de hisoka2501 le 10/03/2009 19:51:39

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 :)

Commentaire de Zova le 20/03/2009 19:36:09

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^^

Commentaire de hisoka2501 le 07/07/2009 13:37:53

le manuel se trouve maintenant ici:
http://www.wbsscript.free.fr/files/man/wbs.webget.txt

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Socket HTTP [ par Landwest ] J'ai copié le code suivant dans mle tuto sur les sockets, mais je ne comprend pas pourquoi il me retourne: _____________________________ HTTP/1.1 200 PicWin Multi-Fonctions : Un p'tit coup de pub [ par RCA ArKanis ] J'osais pas cr&#233;er une nouvelle source pour &#231;a, &#233;tant donn&#233; que le remote pour lequel je pubbe a d&#233;j&#224; &#233;t&#233; envoy Socket basique ( dur pour moi :'( ) [ par Dabouille ] Voila j'essaye d'apprendre les sockets mais la je desespere tout seul a 5h du matin :'(Si quelqu'un voit des erreux peut il me le signaler?merci bcpal avoir un bot [ par Nosferaptu ] bonjour, je voudrais telecharger mon bot mais je ne sais pas ou le telecharger si vous sauriez ou telecharger un bot contacter moimerci d'avance $regex [ par MegaSmax ] Bonsoir, je voudrais ameliorer une partie de mon script. Je voudrais write dans fichier txt une url qui apparait sur un chan.Jai trouv&#233; ca sur sc Socket [ par Dabouille ] Bonjour,quand jessaye de me connecter, j'obtient ceciHTTP/1.1 403 ForbiddenDate: Fri, 03 Feb 2006 21:25:14 GMTServer: Apache/2.0.52 (Red Hat) DAV/2 mo telecharger un bot [ par Nosferaptu ] bonjour,je voudrais savoir ou telecharger&nbsp; un bot qui pourrais "faire la loi" c'est a dire un bot qui gererais le salon.merci d'avance Socket anti-flood [ par michaeldu03 ] Bonjour a tous Je viens de me mettre au socket et la je bloque je cherche un moyen de faire un anti-flood par socket et un anti-spam mais je bloque je Aide pour socket [ par KaLViN2 ] Bonjour : )Mettant mis depuis quelques temps aux sockets je me trouve bloqu&#233; par un truc surement idiot mais je n'ai rien vu dans l'aide pour m'a


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales