Basic Univers
Procedure URLDownloadToFile(URL$, FilePath$)
If InitNetwork() = 0
MessageRequester("Impossible d'innitialiser le réseau", "Il est impossible d'innitialiser le réseau.", 0)
ProcedureReturn 0
EndIf
EOL$ = Chr(13)+ Chr(10)
Position = FindString(URL$, "http://", 1)
If Position = 1
Position = FindString(URL$, "/", 8)
URLL$ = Right(URL$, Len(URL$)- 7)
HOST$ = Left(URLL$, Position - 8)
PosiPort = FindString(HOST$, ":", 1)
If PosiPort = 0
PORT = 80
Else
LNGPort = Len(HOST$)- PosiPort
Port$ = Right(HOST$, LNGPort)
PORT = Val(Port$)
HOST$ = Left(HOST$, Len(HOST$)- LNGPort - 1)
EndIf
GET$ = Right(URLL$, Len(URLL$)- Position + 8)
GET$ = ReplaceString(GET$, " ", "%20")
s = FindString(GET$, "?", 1)
If s <> 0
Method$ = "POST"
GET$ = Left(GET$, s)
Param$ = Right(GET$, Len(GET$)-(s + 1))
Else
Method$ = "GET"
Param$ = ""
EndIf
Else
MessageRequester("URL format incorrect", "L'URL doit-être du type http://HOST/Fichier", 0)
ProcedureReturn 0
EndIf
ClientID = OpenNetworkConnection(HOST$, PORT)
If ClientID
SendNetworkString(ClientID, Method$ +" " + GET$ +" HTTP/1.1" + EOL$)
SendNetworkString(ClientID, "HOST: " + HOST$ + EOL$)
SendNetworkString(ClientID, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7" + EOL$)
If Param$ <> ""
SendNetworkString(ClientID, "Connection: close" + EOL$)
SendNetworkString(ClientID, "Content-Type: text/html" + EOL$)
SendNetworkString(ClientID, "Content: " + Param$ + EOL$ + EOL$)
Else
SendNetworkString(ClientID, "Connection: close" + EOL$ + EOL$)
EndIf
While NetworkClientEvent(ClientID) <> 2
Delay(10)
Wend
Taille = 32000
*Buffer = AllocateMemory(Taille)
Restant = ReceiveNetworkData(ClientID, *Buffer, Taille)
Text$ = PeekS(*Buffer, Restant)
Entete$ = Left(Text$, FindString(Text$, EOL$ + EOL$, 1))
Count = CountString(Entete$, "HTTP/1.1 200 OK")
If Count = 0
MessageRequester("Fichier introuvable sur le serveur.", "Le fichier " + GET$ +" est introuvable sur " + HOST$ +".", 0)
FreeMemory(*Buffer)
ProcedureReturn 0
ElseIf Count = 1
If CreateFile(0, FilePath$)
Structure Corespondance
AdresseMemoire.l
Taille.l
EndStructure
NewList Memoire.Corespondance()
AddElement(Memoire())
Memoire()\AdresseMemoire = *Buffer + Len(Entete$)+ 3
Memoire()\Taille = Restant - Len(Entete$)- 3
Repeat
If restant <= 0
ElseIf Restant > 0
*Buffer = AllocateMemory(Taille)
Restant = ReceiveNetworkData(ClientID, *Buffer, Taille)
AddElement(Memoire())
Memoire()\AdresseMemoire = *Buffer
Memoire()\Taille = Restant
EndIf
Until Restant = 0
ResetList(Memoire())
NextElement(Memoire())
Repeat
WriteData(0, Memoire()\AdresseMemoire, Memoire()\Taille)
FreeMemory(Memoire()\AdresseMemoire)
Until NextElement(Memoire()) = 0
ClearList(Memoire())
CloseNetworkConnection(ClientID)
CloseFile(0)
ProcedureReturn 1
Else
MessageRequester("Impossible de créer le fichier", "Il est impossible de créer le fichier " + FilePath$ +".", 0)
FreeMemory(*Buffer)
ProcedureReturn 0
EndIf
Else
MessageRequester("Vous n'êtes pas connecté à un serveur http.", "Vous n'êtes pas connecté sur un serveur http.", 0)
FreeMemory(*Buffer)
ProcedureReturn 0
EndIf
Else
MessageRequester("Impossible de ce connecter", "Il est impossible de ce connecter à l'adresse: " + HOST$ +".", 0)
ProcedureReturn 0
EndIf
EndProcedure
URL$ = InputRequester("Veuillez entrer l'URL du fichier que vous voulez télécharger.", "URL:", "http://")
FileName$ = GetFilePart(URL$)
FileExtension$ = GetExtensionPart(URL$)
If FileExtension$ = ""
Extension$ = "*"
Else
Extension$ = FileExtension$
EndIf
If FileName$ = ""
DefaultFileName$ = "Default"
Else
DefaultFileName$ = Left(FileName$, Len(FileName$)- Len(Extension$)- 1)
EndIf
If Extension$ <> "*"
File$ = SaveFileRequester("Où voulez-vous enregistrer le fichier téléchargé?", GetCurrentDirectory()+ DefaultFileName$, "*." + Extension$ +"|*." + Extension$ +"|*.*|*.*", 0)
ElseIf Extension$ = "*"
File$ = SaveFileRequester("Où voulez-vous enregistrer le fichier téléchargé?", GetCurrentDirectory()+ DefaultFileName$, "*." + Extension$ +"|*." + Extension$, 0)
EndIf
If SelectedFilePattern() = 0
If GetExtensionPart(File$) <> Extension$
If Extension$ = "*"
Else
File$ = File$ +"." + Extension$
EndIf
EndIf
EndIf
Resultat = URLDownloadToFile(URL$, File$)
If resultat = 0
End
ElseIf resultat = 1
MessageRequester("Le fichier à bien été téléchargé.", "Le fichier vien d'être téléchargé avec succès. Il a été sauvegardé dans: " + File$ +".", 0)
End
EndIf