Environnement CGI
À propos de l'environnement
Lorsque notre application s'exécute en tant qu'application CGI, FastCGI ou SCGI, elle recevra des variables d'environnement du serveur Web. Les variables d'environnement CGI font partie du protocole CGI. Consultez la RFC 3875 pour plus d'informations sur les variables d'environnement CGI.
Dans Fano Framework, la variable d'environnement est encapsulée dans l'interface ICGIEnvironment.
Vous pouvez obtenir l'instance d'interface ICGIEnvironment à l'intérieur du contrôleur à partir de l'instance d'interface IRequest via la propriété env ou la méthode getEnvironment() :
Interface ICGIEnvironment
L'interface ICGIEnvironment fournit plusieurs méthodes pour lire les variables d'environnement CGI, mais la plus importante est la méthode env(). D'autres méthodes agissent simplement comme des méthodes d'assistance utilisant en fait env() en arrière-plan :
Il récupère une valeur de variable d'environnement unique à l'aide de son nom.
Récupération des variables d'environnement
Les exemples de code suivants supposent que myEnv est déclaré comme suit :
- Var myEnv:ICGIEnvironment;
Demande l'adresse IP client
Pour obtenir l'adresse IP du client, on écrira :
ou :
- ipAddr:=myEnv['REMOTE_ADDR'];
ou :
- ipAddr := myEnv.remoteAddr();
Demande l'hôte
ou :
- host:=myEnv['HTTP_HOST'];
ou :
- host:=myEnv.httpHost();
Demande le schéma de requête
ou :
ou :
- scheme:=myEnv.requestScheme();
Par exemple, le schéma contiendra https si votre application est invoquée via le protocole HTTPS.
Demande la méthode de requête
ou :
- method:=myEnv['REQUEST_METHOD'];
ou :
- method:=myEnv.requestMethod();
Par exemple, la méthode contiendra GET si votre application est appelée via un GET de HTTP.
Demande la chaîne de caractères de requête
ou :
- query:=myEnv['QUERY_STRING'];
ou :
- query:=myEnv.queryString();
Veuillez noter qu'il renvoie une chaîne de requête brute. Si vous souhaitez lire la valeur du paramètre de requête analysé, vous pouvez utiliser l'instance IRequest.
Demande l'agent utilisateur
ou :
- browser:=myEnv['HTTP_USER_AGENT'];
ou :
- browser:=myEnv.httpUserAgent();
Elle renvoie une chaîne d'agent utilisateur brute. Si vous souhaitez savoir quel navigateur votre utilisateur utilise ou quel système d'exploitation ou s'il utilise un téléphone mobile ou un ordinateur de bureau, utilisez l'interface IUserAgent.
Variables spécifiques au protocole
Toutes les variables d'environnement avec le préfixe HTTP_ sont en fait des entêtes de requête http, vous pourrez donc lire les mêmes informations à partir de l'interface IRequest. Par exemple, pour lire l'agent utilisateur, vous pouvez également utiliser :
Vous pouvez lire la RFC 3875 Protocol-Specific Meta-Variables pour plus d'informations sur la manière dont l'entête de requête est codé dans les variables d'environnement CGI.
Implémentation intégrée d'ICGIEnvironment
Le Fano Framework fournit plusieurs implémentations intégrées d'ICGIEnvironment. Vous n'avez pas besoin de le créer vous-même, car il sera créé pour vous :
Implémentation | Description |
---|---|
TCGIEnvironment | Classe récupérant les variables d'environnement grâce à la fonction GetEnvironmentVariable() de l'unité SysUtils de Free Pascal. Pour les applications CGI, c'est ce que Fano Framework vous propose. |
TKeyValueEnvironment | Classe récupérant les variables d'environnement via une paire clef-valeur. Pour les applications FastCGI, SCGI ou uwsgi, c'est ce que Fano Framework vous offre. |
Énumérer toutes les variables d'environnement
Parfois, vous souhaitez connaître toutes les variables d'environnement actuelles que le serveur Web envoie à l'application. Par exemple, la classe TErrorHandler doit pouvoir vider toutes les variables d'environnement.
Pour pouvoir énumérer toutes les variables disponibles, vous devez utiliser l'interface ICGIEnvironmentEnumerator. Vous obtenez cette instance d'interface à partir de l'interface ICGIEnvironment via sa propriété enumerator ou sa méthode getEnumerator().
L'énumérateur d'environnement fournit trois méthodes permettant au développeur d'itérer toutes les variables d'environnement :
Méthode | Description |
---|---|
count() | Renvoie le nombre de variables d'environnement. |
getKey() | Renvoie le nom de la variable d'environnement à l'aide d'un index de base zéro. |
getValue() | Renvoie la valeur de la variable d'environnement à l'aide d'un index basé sur zéro. |