Page 1 sur 1

Download Http Avec et Sans Proxy

Publié : lun. 30/avr./2007 15:32
par Thyphoon
Voici un code de ma composition fortement inspiré d'autre code trouvé un peu partout ! :P Qui permet de télécharger en http Avec ou sans Proxy !
Chez moi ça marche bien. Pouvez vous essayer chez vous ?
Parcontre il y a 2 chose que je ne sais pas trop comment faire
Pour virer l'entête et pourquoi lorsque je telecharge en local j'ai mon fichier entourré d'une valeur au debut et d'un Zero a la fin.

Code : Tout sélectionner

Structure ProxyStructure
Adr.s
Port.l
login.s
password.s
EndStructure

Global Proxy.ProxyStructure
Proxy\Adr="xxxxxxxxxxxx" ;Url ou IP
Proxy\Port=xxxx ;Numero de port
Proxy\login="" ;Le login si il y en a un
Proxy\password="";Le mot de passe si il y en a un

InitNetwork()

Procedure.s MyDownload(Url.s,UseProxy=#False)
  Protected Server.s,Port.l,conc$,enc$,Header.s,Res.l,*Buffer = AllocateMemory(1024),String.s,DataLength.l
  
  ;Si j'ai un Proxy je dois me connecter au Proxy
  If UseProxy=#True
    Path.s=Url
    Server.s=Proxy\Adr
    Port.l=Proxy\Port
    conc$=Proxy\login+":"+Proxy\password
    OutputBuffer = AllocateMemory(Len(conc$)*4)
    Base64Encoder(@conc$,Len(conc$),OutputBuffer,Len(conc$)*4)
    enc$=PeekS(OutputBuffer)
  
  ;Si je n'ai pas de proxy on se connecte directement au serveur  
  ElseIf UseProxy=#False
    Port=80
    Path.s = Url
    Url.s = RemoveString(Url,"http://",1)
     i = FindString(Url,"/",1)
     If i
       Server = Left(Url,i-1)
     Else
       Server = Url
     EndIf
  EndIf
  
  ;Connection au Serveur 
  ConnectionID = OpenNetworkConnection(Server, Port)
  If ConnectionID

    ;Creation de l'entête a envoyer
    Header ="GET "+Path+" HTTP/1.1"+#CRLF$
    
    If UseProxy=#True
      Header + "Proxy-Authorization: Basic "+enc$+#CRLF$
    Else
      Header + "Host: "+Server+#CRLF$+#CRLF$
    EndIf 
  
    Header+#CRLF$
     Debug Header
    Res=SendNetworkData(ConnectionID,@Header,Len(Header))
  
    Delay(10)
    result = NetworkClientEvent(ConnectionID)
    Repeat ;On lit les données qui arrive
      DataLength = ReceiveNetworkData(ConnectionID,*Buffer,1024)
      String + PeekS(*Buffer,DataLength)
    Until DataLength<1024
    FreeMemory(*Buffer) ;POuff! Pu besoin on efface

    MessageRequester("Done!","Your Data" + Chr(13) + Chr(10) + Trim(String),0)
            
    ;C'est finit on se deconnecte
    CloseNetworkConnection(ConnectionID)
    ProcedureReturn String
  EndIf
EndProcedure

String.s=MyDownload("http://fr.yahoo.com",#True)
;  If CreateFile(0,"test.txt")
;    WriteData(0,@String,Len(String))
;    CloseFile(0)
;  EndIf
;  RunProgram("test.txt")

String.s=MyDownload("http://localhost/",#False)

Publié : lun. 30/avr./2007 19:29
par lewkey
je pense que le 0 du nom de ton fichier viens du 0 de 'CreateFile(0,"test.txt") ', mais je ne suis pas sur de ce que j'avance.

Publié : lun. 30/avr./2007 19:32
par Thyphoon
lewkey a écrit :je pense que le 0 du nom de ton fichier viens du 0 de 'CreateFile(0,"test.txt") ', mais je ne suis pas sur de ce que j'avance.
Non non ça ne vient pas de là le creatfile est mis en commentaire... :(
Mais merci d'avoir jeter un oeil :P si quelqu'un d'autre a une idée ...

Publié : lun. 30/avr./2007 21:08
par lewkey
mince, c'est vrai, j'avais pas vu (en plus, tout est vert!!!)
bon, bah je ne voit pas (et j'ai pas vraiment d'expérience!!)

Enlever l'enTête

Publié : lun. 30/avr./2007 23:04
par leo.cd

Code : Tout sélectionner

debut = FindString(result, Chr(13) + Chr(10) + Chr(13) + Chr(10), 1)
  
  result = Right(result, Len(result) - debut - 3)
où result est le contenu du fichier.

Je suis pas sûr que ce soit ce que tu cherche mais j'essai toujours ... J'ai fait une fonction qui fait sensiblement la même chose, mais pas de proxy.

Pour ton deuxième problème je comprend pas trop.

Publié : mar. 01/mai/2007 8:18
par Thyphoon
Merci beaucoup je me doutais que c'était ça ...mais comme sans proxy l'entête est suivi d'un chiffre ou je ne vois pas ce que c'est...je me suis dit que je dois être a côté de la plaque !

Merci d'avoir repondu !

Publié : mar. 01/mai/2007 9:04
par Thyphoon
Parcontre si quelqu'un a une explication pour le deuxième problème ... :P

Publié : mar. 01/mai/2007 11:03
par leo.cd
On peut avoir un exemple de ce que te retourne le serveur ? (en tête + trucs entre ton fichier)

Juste pour essayer de trouver une logique a ca .... C'est toujours les mêmes valeurs ?

Publié : mar. 01/mai/2007 17:58
par Thyphoon
J'ai beaucoup changer le code et j'ai retirer la gestiond e proxy. ça marche bien pour l'instant mais demain je vais réintégré la gestion de proxy. Si j'ai de nouveau le problème je posterais un exemple.
Merci de ton interêt ! :wink: