Download Http Avec et Sans Proxy

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Download Http Avec et Sans Proxy

Message 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)
lewkey
Messages : 45
Inscription : jeu. 26/avr./2007 20:39

Message 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.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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 ...
lewkey
Messages : 45
Inscription : jeu. 26/avr./2007 20:39

Message 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!!)
leo.cd
Messages : 15
Inscription : lun. 24/avr./2006 20:41

Enlever l'enTête

Message 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.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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 !
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Parcontre si quelqu'un a une explication pour le deuxième problème ... :P
leo.cd
Messages : 15
Inscription : lun. 24/avr./2006 20:41

Message 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 ?
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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:
Répondre