Section courante

A propos

Section administrative du site

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() :

  1. ...
  2. Function TMyController.handleRequest(
  3.     Const Request:IRequest;
  4.     Const Response:IResponse;
  5.     Const Args:IRouteArgsReader
  6. ):IResponse;
  7. Var 
  8.  myEnv:ICGIEnvironment;
  9. Begin
  10.  myEnv:=request.env;
  11.  ...
  12. End;

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 :

  1. Function Env(Const keyName:String):String;

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 :

  1. Var myEnv:ICGIEnvironment;

Demande l'adresse IP client

Pour obtenir l'adresse IP du client, on écrira :

  1. Var ipAddr:String;
  2. ...
  3. ipAddr:=myEnv.env('REMOTE_ADDR');

ou :

  1. ipAddr:=myEnv['REMOTE_ADDR'];

ou :

  1. ipAddr := myEnv.remoteAddr();

Demande l'hôte

  1. Var host:String;
  2. ...
  3. host:=myEnv.env('HTTP_HOST');

ou :

  1. host:=myEnv['HTTP_HOST'];

ou :

  1. host:=myEnv.httpHost();

Demande le schéma de requête

  1. Var scheme:String;
  2. ...
  3. scheme:=myEnv.env('REQUEST_SCHEME');

ou :

  1. Var scheme:String;
  2. ...
  3. scheme:=myEnv.env('REQUEST_SCHEME');

ou :

  1. 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

  1. Var method:String;
  2. ...
  3. method:=myEnv.env('REQUEST_METHOD');

ou :

  1. method:=myEnv['REQUEST_METHOD'];

ou :

  1. 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

  1. Var query:String;
  2. ...
  3. query:=myEnv.env('QUERY_STRING');

ou :

  1. query:=myEnv['QUERY_STRING'];

ou :

  1. 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

  1. Var browser:String;
  2. ...
  3. browser:=myEnv.env('HTTP_USER_AGENT');

ou :

  1. browser:=myEnv['HTTP_USER_AGENT'];

ou :

  1. 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 :

  1. Var browser:String;
  2. ...
  3. browser:=request.headers.getHeader('User-Agent');

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.

  1. Var myEnv:ICGIEnvironment;
  2.     envEnum:ICGIEnvironmentEnumerator;
  3.     indx:Integer;
  4.     varName,varValue:String;
  5. ...
  6. envEnum:=myEnv.enumerator;
  7. For indx:=0 to envEnum.count-1 do Begin
  8.  varName:=envEnum.getKey(indx);
  9.  varValue:=envEnum.getValue(indx);
  10. End;


Dernière mise à jour : Vendredi, le 18 octobre 2024