Outils pour utilisateurs

Outils du site


Panneau latéral

Accueil

Select other language :


Apprentissage

Enseignements

Enseignements Département Informatique SI5 et Master IFI

Enseignements Département Bâtiment Polytech'Nice

Autres Formations française et étrangère

Activités administratives, Ingénierie et Innovation Pédagogiques

Apprentissage Département Informatique SI5/Master 2 ingénierie informatique EUR DS4H


Recherche

Valorisation de la Recherche

Dépôts Logiciels à l’Agence de Protection des Programme (APP)

Valorisation des résultats de recherche et transfert

Diffusion de la Culture scientifique et Technologique

Communications de presse

Séminaire ENSI Tunis

Pédagogie Innovante

Relations industrielles et socio-économique

Organisation de Manifestations

  • Conférence sur les FabLabs, Alexandre Schneider, Professeur Agrégé en Génie Mécanique, Université de Reims Champagne-Ardenne Web
  • Journées UbiMob'14 Site Web

Animation de la Recherche

U-Santé

Privé

Outils

Sources d'Informations

cours:intro_web_web_service_si3_2016_2017

Ceci est une ancienne révision du document !


Cours d'Introduction aux Web et Services Web

Cet ensemble de cours se déroule dans le prolongement de cours sur les protocoles UDP et TCP over IP. Il s'appuie donc sur la programmation Socket pour les développements en TP telle que présentée dans le support de cours Sockets de Dino Lopez.


Cours d'introduction : du Web au Web services

Travaux pratiques : Mon premier serveur web dans mon serveur TCP/IP Socket

Quelques Notes et Commentaires :
  • Une des difficultés de ce TD réside dans le respect du format d'échange entre le client (browser Web) et votre serveur Web. Ce format est décrit dans le protocole HTTP.Les détails sont donnés dans les transparents du cours ci-dessus.
  • La lecture d'une variable d'environnement avec python se fait grâce à : os.environ[“VAR_NAME”]
Quelques compléments pour le TD

Rappel sur la programmation réseau avec les sockets et python

Exemple de Code Python d'un client et d'un serveur TCP/IP (Python 2) code_client_server_socket_python.zip, attention donc à la version Python que vous utilisé Différences entres python 2 et python 3

RENDU TD1

Ce TD est à rendre à l'enseignant responsable du cours sous la forme suivante :
  1. les fichiers python (ex. serveurweb.py) et tous les fichiers et répertoires nécessaires à la bonne exécution de votre solution (ex. la sous arborescence des fichiers et répertoires exportés par votre serveur) doivent être regroupés dans un fichier <votre_nom>.zip, où <votre_nom> est votre nom (sans le prénom) tout en minuscules.
  2. Un fichier README.txt doit être rédigé pour donner un minimum d'explications sur votre solution comme la commande d'appel de votre programme et ses arguments, l'url à définir dans votre browser web pour tester votre serveur et les résultats attendus dans le browser.
  3. Le fichier .zip et le fichier README.txt doivent être attaché à un email à l'attention de tigli@unice.fr
  4. Votre email à l'attention de tigli@unice.fr doit comporter le sujet suivant : [TD SERVEUR WEB SI3] [<votre_nom>], où <votre_nom> est votre nom (sans le prénom) tout en minuscules.
  1. La date limite de rendu est le Dimanche 26/03/17 à minuit . Toute heure de retard sera pénalisée par un point de moins sur la note du TD.
  2. Tout rendu qui ne respectera pas l'intégralité des consignes ci-dessus ne sera pas pris en compte car intraitable et potentiellement perdu lors de la collecte et le rangement automatique de mails.

Cours sur le Web Dynamique et le protocole HTTP

Travaux pratiques : Serveur de pages Web Dynamiques

Cours d'introduction aux Services Web

Travaux pratiques : Introduction aux Web Services

RENDU TD3

Le rendu porte sur la question 1 du “TD introduction aux services Web”. Il s'agit de fournir votre serveur Web supportant les invocations HTTP/GET et HTTP/POST vers les deux types de cgi-bin.

Pour illustrer le fonctionnement de votre serveur vous devrez écrire trois cgi-bin :

  • Un premier cgi-bin type GET qui renverra une chaine de caractère reçue précédée de la chaine “GET”
  • Un second cgi-bin type POST qui renverra une chaine de caractère reçue précédée de la chaine “POST”
  • Un premier cgi-bin type POST/GET qui renverra une chaine de caractère reçue précédée de la chaine “GET de POST/GET” s'il répond à une commande GET et “POST de POST/GET” s'il répond à une commande POST

Pour tester les 4 cas d'appels des cgi-bin, 4 formulaires seront écrits avec des noms explicites test-post.get, test-post.html, test-post-get-post.html, test-get-get-post.html.

Ces 4 formulaires seront accessible directement comme fichiers .html à la racine $HTTP_ROOT de votre serveur.

Ce TD est à rendre à l'enseignant responsable du cours sous la forme suivante :
  1. les fichiers python (ex. serveurweb.py) et tous les fichiers et répertoires nécessaires à la bonne exécution de votre solution (ex. la sous arborescence des fichiers et répertoires exportés par votre serveur) doivent être regroupés dans un fichier <votre_nom>.zip, où <votre_nom> est votre nom (sans le prénom) tout en minuscules.
  2. Un fichier README.txt doit être rédigé pour donner un minimum d'explications sur votre solution comme les 4 url à tester dans un browser web.
  3. Le fichier .zip et le fichier README.txt doivent être attaché à un email à l'attention de tigli@unice.fr
  4. Votre email à l'attention de tigli@unice.fr doit comporter le sujet suivant : [TD SERVEUR WEB avec POST cgi-bin SI3] [<votre_nom>], où <votre_nom> est votre nom (sans le prénom) tout en minuscules.
  1. La date limite de rendu est le Dimanche 16/04/17 à minuit . Toute heure de retard sera pénalisée par un point de moins sur la note du TD.
  2. Tout rendu qui ne respectera pas l'intégralité des consignes ci-dessus ne sera pas pris en compte car intraitable et potentiellement perdu lors de la collecte et le rangement automatique de mails.

Frequently Asked Quastions: FAQ

Comment écrire un chemin de fichier indépendant de l'OS ?

on dispose également de la fonction os.path.join( chemin1, chemin2) qui permet de concaténer des chemins simplement en respectant les convention de l'OS de support :

chemin=os.getenv('HOME')
chemin=os.path.join(chemin,'Bureau')
print (chemin)
/home/user/Bureau
Comment utiliser les pipes en python ?
  • Le module os (import os) en python vous permet d'avoir accès à une API proche de POSIX dans laquelle vous trouvez :
 
os.fork()
pipein, pipeout = os.pipe()
... = os.read(pipein, ...)
os.write(pipeout, ...)
os.close(pipein)
os.close(pipeout)
  • Python permet aussi d'accéder à une struture de pipes à la création d'un processus. Voici quelques explications :
 myPopen = subprocess.Popen(['cat', '-n']) : fait l'appel système non bloquant.
si on veut pouvoir envoyer des données sur le stdin du process, il faut faire : myPopen = subprocess.Popen(['cat', '-n'], stdin = subprocess.PIPE).

si on veut pouvoir récupérer des données de la sortie standard et de la sortie d'erreur du process, il faut faire : 
<code>
myPopen = subprocess.Popen(['cat', '-n'], stdout = subprocess.PIPE, stderr = subprocess.PIPE).

myPopen.stdin, myPopen.stdout, myPopen.stderr : les entrées et sorties standard, quand elles ont été mises a subprocess.PIPE dans le constructeur. myPopen.stdout est de la classe file.

Exemple :

 
    import subprocess
     s = subprocess.Popen(['bc','-q'],stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
    ...
    s.stdin.write(cmde+'\n')
    s.stdin.flush()
    res = s.stdout.readline()
    print "Resultat:",res
    
s.stdin.close()
s.stdout.close()
    
Commment puis-je détecter le type d'invocation GET ou POST de mon cgi-bin ?

L'information se trouve dans le champ d'entête du message HTTP. Il s'agit de RequestMethod.

Commment savoir que le message HTTP à lire est fini ?

Le test de fin se basera sur la taille du message qui se trouve dans un champ d'entête du message HTTP. Il s'agit de Content-Lenght.

Comment accéder aux variables d’environnement en Python

Tout cgi-bin doit pouvoir s’appuyer sur les paramètres qui lui sont destinés et qui ont été collectés dans la variable d’environnement QUERY_STRING. En conséquence le serveur doit être capable de préparer des variables d’environnement avant de lancer le cgi-bin. Pour obtenir une variable d'environnement avec Python vous pouvez utiliser le module os et la variable environ avec par exemple :

import os 
...
if os.environ.has_key('nom_de_la_cle'):
print os.environ['nom_de_la_cle']

Compléments de Cours et de TD

Quelques Cours et Tutoriels sur Python
Exemple Gestion de Chaines de caractères
Exemple de code Python d'un client / Serveur
  • Code Python d'un client et d'un serveur TCP/IP code_client_server_socket_python.zip
  • Attention : les méthodes send, recv sur les sockets manipulent des bytes. Vous ne pouvez donc envoyer et recevoir directement des chaines de caractères. La méthode encode sur une chaine pour récupérer une liste de bytes et decode sur une liste de bytes pour récupérer la chaine de caractères correspondantes
  • Attention ce code est prévu pour Python ⇐ 2.x. En python 3.x il faudar faire quelques modifications comme print à réécrire comme une fonction en print().
Autre

ARCHIVES

cours/intro_web_web_service_si3_2016_2017.1491997611.txt.gz · Dernière modification: 2017/04/12 13:46 par tigli