Je présume que ce problème a déjà été évoqué dans ce forum, mais je n'arrive pas a trouver un exemple.
Le problème:
Je cherche a récupérer de simple pages HTML sur divers serveurs internet.
Mais pour obtenir les pages, il me faut fournir un header valide pour le serveur dans ma requête HTTP.
Pour l'instant, je m'appuie sur WGET pour arriver a mes fins. (Voir Procedure getURL(page$))
La solution:
J’espère qu'elle viendra d'une âme charitable qui pourra m'aiguiller pour remplacer WGET par un bout de code PB
Je vous en remercie par avance.
Le code qui suit est un code légèrement épuré.
cage
Code : Tout sélectionner
Global host$ = "<nom_du_host>" ; www.purebasic.com par exemple
Global site$ = "<adresse_du_site>" ; http://www.purebasic.com par exemple
Global page$ = "<nom_de_la_page>" ; index.php par exemple
Procedure checkURL(link$, code$ = "200 OK")
If link$ = #Null$
Debug "no link"
ProcedureReturn #False
EndIf
Protected header$
Protected result$
If InitNetwork()
header$ = GetHTTPHeader(link$)
result$ = StringField(header$, 1, #LF$)
If FindString(result$, code$, 1, #PB_String_NoCase)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure getURL(page$)
Protected retval
Protected URL$, header$, result$
;;;
Protected Cookie$ = "<cookie>"
Protected Accept$ = "Accept: text/html, application/xhtml+xml, image/jxr, */*"
Protected AcceptLanguage$ = "Accept-Language: fr-FR"
Protected UserAgent$ = "User-Agent: <user_agent>"
Protected Referer$ = "Referer: " + site$
Protected Host$ = "Host: " + host$
Protected param$
param$ = " --header=" + Chr(34) + Cookie$ + Chr(34)
param$ + " --header=" + Chr(34) + Accept$ + Chr(34)
param$ + " --header=" + Chr(34) + AcceptLanguage$ + Chr(34)
param$ + " --header=" + Chr(34) + UserAgent$ + Chr(34)
param$ + " --header=" + Chr(34) + Referer$ + Chr(34)
param$ + " --header=" + Chr(34) + Host$ + Chr(34)
;;;
SetFileAttributes(page$, #PB_FileSystem_Normal)
DeleteFile(page$, #PB_FileSystem_Force)
URL$ = site$ + "/" + page$
If checkURL(URL$)
;;;;La ligne qui suit ne fonctionne pas a cause de l'absence des headers
;;;;retval = ReceiveHTTPFile(URL$, page$, #PB_HTTP_NoRedirect)
retval = RunProgram("wget.exe", param$ + " " + URL$, AppPath$, #PB_Program_Wait|#PB_Program_Hide)
If retval
ProcedureReturn #True
Else
DeleteFile(page$, #PB_FileSystem_Force)
ProcedureReturn #False
EndIf
EndIf
EndProcedure
getURL(page$)