version 6.7
LIRE ENTETE HTTP (entête|tabChamps{; tabValeurs})
Paramètre | Type | Description | |
entête|tabChamps | Texte|Tab Texte | En-tête HTTP de la requête ou | |
Champs de l'en-tête HTTP | |||
tabValeurs | Tab Texte | Contenu des champs de l'en-tête HTTP |
Description
La commande LIRE ENTETE HTTP retourne, soit sous forme de chaîne, soit sous forme de deux tableaux, l'en-tête HTTP de la requête en cours de traitement.
Cette commande fonctionne uniquement en mode sans contexte. Elle peut être appelée depuis toute méthode (Méthode base Sur connexion Web, Méthode base Sur authentification Web, méthode appelée par "/4DACTION"...) exécutée dans un process Web en mode sans contexte.
Appelée en mode contextuel, LIRE ENTETE HTTP retourne des chaînes vides.
Première syntaxe : LIRE ENTETE HTTP (entête)
Lorsque vous utilisez cette syntaxe, le résultat retourné dans la variable entête est du type suivant :
"GET /page.html HTTP\1.0"+Caractere(13)+Caractere(10)+"User-Agent: browser"+Caractere(13)+Caractere(10)+"Cookie: C=HELLO"
Chaque champ d'en-tête est séparé par une séquence CR+LF (Retour chariot+Retour à la ligne), sous Windows et Mac OS.
Seconde syntaxe : LIRE ENTETE HTTP (tabChamps; tabValeurs)
Lorsque vous utilisez cette syntaxe, les résultats retournés dans les tableaux tabChamps et tabValeurs sont du type suivant :
tabChamps{1} = "X-METHOD" | tabValeurs{1} = "GET" * |
tabChamps{2} = "X-URL" | tabValeurs{2} = "/page.html" * |
tabChamps{3} = "X-VERSION" | tabValeurs{3} = "HTTP/1.0" * |
tabChamps{4} = "User-Agent" | tabValeurs{4} = "browser" |
tabChamps{5} = "Cookie" | tabValeurs{5} = "C=HELLO" |
* Ces trois premiers éléments ne correspondent pas à des champs HTTP. Ils constituent la première ligne de la requête.
Conformément à la norme HTTP, les noms des champs sont toujours libellés en anglais.
A titre indicatif, voici une liste non exhaustive des champs HTTP pouvant être présents dans une requête :
Accept : ce que le navigateur est susceptible d'accepter comme contenu.
Accept-Language : la ou les langue(s) acceptée(s) par le navigateur (pour information). Permet de choisir une page d'accueil en fonction de la langue préférée du navigateur.
Cookie : liste des cookies.
From : adresse e-mail de l'utilisateur du navigateur.
Host : nom ou adresse du serveur (par exemple, dans le cas de l'URL http://monserveurweb/mapage.html, Host prend la valeur "monserveurweb"). Permet de gérer les cas où plusieurs noms pointent vers la même adresse IP (virtual hosting).
Referer : provenance de la requête (par exemple http://monserveurweb/mapage1.html), c'est-à-dire la page que l'utilisateur affiche s'il clique sur le bouton Précédent de son navigateur.
User-Agent : nom et version du navigateur ou du proxy.
Exemple
Cette méthode permet de récupérer le contenu de tout champ d'en-tête de requête HTTP :
` Méthode projet GetHTTPField ` GetHTTPField ( Texte ) -> Texte ` GetHTTPField ( Nom en-tête HTTP ) -> Contenu en-tête HTTP C_TEXTE($0;$1) C_ENTIER LONG($vlElem) TABLEAU TEXTE($noms;0) TABLEAU TEXTE($valeurs;0) $0:="" LIRE ENTETE HTTP ($noms;$valeurs) $vlElem:=Chercher dans tableau($noms;$1) Si ($vlElem>0) $0:=$valeurs{$vlElem} Fin de si
Une fois que cette méthode projet est écrite, vous pouvez l'appeler ainsi :
` Contenu de l'en-tête Cookie $cookie:=GetHTTPField("Cookie")
Vous pouvez également envoyer des pages différentes en fonction de la langue du navigateur (par exemple dans la Méthode base Sur connexion Web) :
$langue:=GetHTTPField("Accept-Language") Au cas ou :($langue="@fr@") `Français (cf. liste ISO 639) ENVOYER FICHIER HTML("index_fr.html") :($langue="@es@") `Espagnol (cf. liste ISO 639) ENVOYER FICHIER HTML("index_es.html") Sinon ENVOYER FICHIER HTML("index.html") Fin de cas
Note : Les navigateurs Web permettent de définir plusieurs langues par défaut. Elles sont listées dans le champ "Accept-Language", séparées par des ";". Leur priorité est définie par leur position au sein de la chaîne ; il peut donc être utile de tester la position des langues dans la chaîne.
Exemple de gestion des hôtes virtuels (par exemple dans la Méthode base Sur connexion Web). Les trois noms "home_site.com", "home_site1.com" et "home_site2.com" pointent vers la même adresse IP, par exemple 192.1.2.3.
$host:=GetHTTPField("Host") Au cas ou :($host="www.site1.com") ENVOYER FICHIER HTML("home_site1.com") :($host="www.site2.com") ENVOYER FICHIER HTML("home_site2.com") Sinon ENVOYER FICHIER HTML("home_site.com") Fin de cas
Référence
FIXER ENTETE HTTP, LIRE CORPS HTTP.