[go: up one dir, main page]

0% ont trouvé ce document utile (0 vote)
34 vues64 pages

Python - Programmation Réseau

4

Transféré par

daryl emani
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
34 vues64 pages

Python - Programmation Réseau

4

Transféré par

daryl emani
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 64

Python - Programmation réseau

La programmation réseau Python consiste à utiliser python comme langage de programmation


pour gérer les exigences de mise en réseau informatique. Par exemple, si nous voulons créer et
exécuter un serveur Web local ou télécharger automatiquement certains fichiers à partir d'une
URL avec un modèle.

Public
Ce didacticiel est conçu pour les diplômés en informatique ainsi que pour les professionnels du
logiciel qui souhaitent apprendre la programmation réseau en étapes simples et faciles en
utilisant Python comme langage de programmation.

Conditions préalables
Avant de poursuivre ce didacticiel, vous devez avoir une connaissance de base de l'écriture de
code en langage de programmation Python, de l'utilisation de n'importe quel IDE python et de
l'exécution de programmes Python. Si vous êtes complètement nouveau dans Python, veuillez
vous référer à notre tutoriel Python pour avoir une bonne compréhension du langage.

Python - Introduction à la programmation


réseau
Comme la polyvalence de python en tant que langage de programmation s'est développée au fil
des ans, nous constatons que python est également très approprié dans le monde de la
programmation réseau. Avec la croissance du cloud computing, la programmation réseau est
devenue un sujet encore plus brûlant et python a un grand rôle à jouer. Vous trouverez ci-
dessous les quelques raisons importantes de l'utilisation de python comme langage préféré pour
la programmation réseau.

Programmation de socket
Les sockets sont les liens par lesquels le client et les serveurs communiquent entre eux. Par
exemple, lorsqu'un navigateur est ouvert, un socket est automatiquement créé pour se connecter
au serveur. Python a un module de socket qui peut être utilisé pour implémenter diverses
fonctionnalités de socket comme la liaison d'une adresse ou le démarrage d'un port d'écoute. La
programmation de socket est fondamentale pour les réseaux informatiques et python le gère
bien.

Programmation client
Le client est l'ordinateur qui demande des informations et attend la réponse. Les programmes
Python peuvent être écrits pour valider de nombreuses actions côté client comme l'analyse d'une
URL, l'envoi de paramètres avec l'URL lors de la soumission d'une requête, la connexion à une
URL alternative si l'accès à une URL échoue, etc. Ces programmes sont exécutés dans les
programmes clients et gérer tous les besoins de communication avec le serveur même sans
utiliser de navigateur. Par exemple, vous pouvez fournir une URL au programme python pour
télécharger un fichier et cela sera fait par le programme lui-même sans l'aide du programme du
navigateur.
Construire des serveurs Web
Il est possible de créer des serveurs Web simples qui sont assez bons pour exécuter des sites
Web en utilisant python comme langage de programmation. Python a déjà des serveurs Web
intégrés qui peuvent être modifiés pour obtenir certaines fonctionnalités supplémentaires
nécessaires.
le SimpleHTTPServerLe module fournit les fonctionnalités d'un serveur Web prêtes à l'emploi et
vous pouvez commencer à l'exécuter à partir de l'installation python locale. En python 3, il est
nomméhttp.serverCherryPy et Tornado sont des exemples de serveurs Web écrits en python
qui fonctionnent aussi bien que des serveurs Web non python bien connus comme Apache ou
Ngnix.

Mise au rebut Web


L'une des principales raisons pour lesquelles python est devenu célèbre est sa domination parmi
les langages utilisés pour démanteler le Web. Sa structure de données et ses capacités d'accès
au réseau le rendent idéal pour visiter des pages Web et télécharger leurs données
automatiquement. Et s'il y a une connectivité API disponible pour le site Web cible, alors python
la gérera encore plus facilement grâce à ses structures de programme.

Web Frame fonctionne


Web Frame Works facilite et accélère le développement d'applications en offrant des structures
et une modularité prédéfinies. Le développeur doit faire un codage minimal pour tirer parti de ces
bibliothèques existantes et personnaliser un peu pour atteindre l'objectif.Django et Flask sont
deux célèbres qui ont été largement utilisés à des fins commerciales même s'ils sont open
source.

Obtenir des emplacements


géographiques
Python a des bibliothèques qui gèrent les données géographiques. Il peut trouver le nom des
adresses professionnelles si la latitude et la longitude sont connues et vice versa. Bien sûr, il faut
l'aide des données d'autres fournisseurs de cartes comme google maps. La capacité de mise en
réseau de Python s'étend vraiment même à différentes frontières géographiques!

Python - Environnement réseau


Python 3 est disponible pour Windows, Mac OS et la plupart des versions du système
d'exploitation Linux. Même si Python 2 est disponible pour de nombreux autres systèmes
d'exploitation, le support de Python 3 n'a pas été rendu disponible pour eux ou a été abandonné.

Configuration de l'environnement local


Ouvrez une fenêtre de terminal et tapez "python" pour savoir s'il est déjà installé et quelle version
est installée.
Obtenir Python

Plate-forme Windows
Les binaires de la dernière version de Python 3 (Python 3.5.1) sont disponibles sur cette page de
téléchargement
Les différentes options d'installation suivantes sont disponibles.
 Fichier zip intégrable Windows x86-64
 Programme d'installation de l'exécutable Windows x86-64
 Programme d'installation Web Windows x86-64
 Fichier zip intégrable Windows x86
 Programme d'installation de l'exécutable Windows x86
 Programme d'installation Web Windows x86
Note- Pour installer Python 3.5.1, la configuration minimale requise pour le système d'exploitation
est Windows 7 avec SP1. Pour les versions 3.0 à 3.4.x, Windows XP est acceptable.

Plateforme Linux
Différentes versions de Linux utilisent différents gestionnaires de packages pour l'installation de
nouveaux packages.
Sur Ubuntu Linux, Python 3 est installé à l'aide de la commande suivante à partir du terminal.

$sudo apt-get install python3-minimal

Installation à partir de la source


Téléchargez l'archive tar source gzippée à partir de l'URL de téléchargement de Python
- https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz

Extract the tarball


tar xvfz Python-3.5.1.tgz
Configure and Install:
cd Python-3.5.1
./configure --prefix = /opt/python3.5.1
make
sudo make install

Mac OS
Téléchargez les programmes d'installation Mac OS à partir de cette URL
- https://www.python.org/downloads/mac-osx/
 Programme d'installation de Mac OS X 64 bits / 32 bits - python-3.5.1-macosx10.6.pkg
 Programme d'installation de Mac OS X 32 bits i386 / PPC - python-3.5.1-macosx10.5.pkg
Double-cliquez sur ce fichier de package et suivez les instructions de l'assistant pour l'installer.
Le code source, binaires, documentation, actualités, etc. les plus à jour et les plus récents est
disponible sur le site officiel de Python -
Python Official Website - https://www.python.org/
Vous pouvez télécharger la documentation Python à partir du site suivant. La documentation est
disponible aux formats HTML, PDF et PostScript.
Python Documentation Website- www.python.org/doc/

Configurer PATH
Les programmes et autres fichiers exécutables peuvent se trouver dans de nombreux
répertoires. Par conséquent, les systèmes d'exploitation fournissent un chemin de recherche qui
répertorie les répertoires dans lesquels il recherche les exécutables.
Les caractéristiques importantes sont -
 Le chemin est stocké dans une variable d'environnement, qui est une chaîne nommée
gérée par le système d'exploitation. Cette variable contient des informations disponibles
pour le shell de commande et d'autres programmes.
 La variable de chemin est nommée comme PATH sous Unix ou Path sous Windows
(Unix est sensible à la casse; Windows ne l'est pas).
 Sous Mac OS, le programme d'installation gère les détails du chemin. Pour appeler
l'interpréteur Python à partir d'un répertoire particulier, vous devez ajouter le répertoire
Python à votre chemin.

Définition du chemin sous Unix / Linux


Pour ajouter le répertoire Python au chemin d'une session particulière sous Unix -
 In the csh shell - tapez setenv PATH "$ PATH: / usr / local / bin / python3" et appuyez
sur Entrée.
 In the bash shell (Linux) - tapez export PYTHONPATH = / usr / local / bin / python3.4 et
appuyez sur Entrée.
 In the sh or ksh shell - tapez PATH = "$ PATH: / usr / local / bin / python3" et appuyez
sur Entrée.
Note − / usr / local / bin / python3 est le chemin du répertoire Python.

Définition du chemin sous Windows


Pour ajouter le répertoire Python au chemin d'une session particulière dans Windows -
 At the command prompt - tapez path% path%; C: \ Python et appuyez sur Entrée.
Note - C: \ Python est le chemin du répertoire Python

Exécuter Python
Il existe trois façons différentes de démarrer Python -

Interprète interactif
Vous pouvez démarrer Python depuis Unix, DOS ou tout autre système qui vous fournit un
interpréteur de ligne de commande ou une fenêtre shell.
Entrer python la ligne de commande.
Commencez immédiatement à coder dans l'interpréteur interactif.

$python # Unix/Linux
or
python% # Unix/Linux
or
C:>python # Windows/DOS

Environnement de développement intégré


Vous pouvez également exécuter Python à partir d'un environnement d'interface utilisateur
graphique (GUI), si vous avez une application GUI sur votre système qui prend en charge
Python.
 Unix - IDLE est le tout premier IDE Unix pour Python.
 Windows - PythonWin est la première interface Windows pour Python et est un IDE
avec une interface graphique.
 Macintosh - La version Macintosh de Python avec l'IDE IDLE est disponible sur le site
principal, téléchargeable sous forme de fichiers MacBinary ou BinHex'd.
Si vous ne parvenez pas à configurer correctement l'environnement, vous pouvez demander
l'aide de votre administrateur système. Assurez-vous que l'environnement Python est
correctement configuré et fonctionne parfaitement.
Note - Tous les exemples donnés dans les chapitres suivants sont exécutés avec la version
Python 3.4.1 disponible sur Windows 7 et Ubuntu Linux.
Nous avons déjà mis en place l'environnement de programmation Python en ligne, afin que vous
puissiez exécuter tous les exemples disponibles en ligne pendant que vous apprenez la théorie.
N'hésitez pas à modifier n'importe quel exemple et à l'exécuter en ligne

Python - Protocole Internet


Le protocole Internet est conçu pour mettre en œuvre un système d'adresses uniforme sur tous
les ordinateurs connectés à Internet partout et pour permettre aux paquets de voyager d'un bout
à l'autre de l'Internet. Un programme comme le navigateur Web devrait être capable de se
connecter à un hôte n'importe où sans jamais savoir quel labyrinthe de périphériques réseau
traverse chaque paquet au cours de son voyage. Il existe différentes catégories de protocoles
Internet. Ces protocoles sont créés pour répondre aux besoins de différents types de
communication de données entre différents ordinateurs sur Internet.
Python dispose de plusieurs modules pour gérer chacun de ces scénarios de communication.
Les méthodes et fonctions de ces modules peuvent faire le travail le plus simple de simplement
valider une URL ou également le travail complexe de gérer les cookies et les sessions. Dans ce
chapitre, nous examinerons les modules python les plus importants utilisés pour les protocoles
Internet.

Protocole Nom du module La description


Python

HTTP urllib.request Ouverture de l'URL HTTP


HTTP urllib.response Créer un objet de réponse pour une demande d'URL

HTTP urllib.parse Pour casser les chaînes URL (Uniform Resource Locator) dans des composants
emplacement réseau, chemin, etc.),

HTTP urllib.robotparser Il détermine si un agent utilisateur particulier peut ou non récupérer une URL
robots.txt.

FTP ftplib implémente le côté client du protocole FTP. Vous pouvez l'utiliser pour écrire
une variété de tâches FTP automatisées, telles que la mise en miroir d'autres

POP poplib Ce module définit une classe, POP3, qui encapsule une connexion à un serveu
serveur de messagerie

IMAP imaplib Ce module définit trois classes, IMAP4, IMAP4_SSL et IMAP4_stream, qui enc
IMAP4 pour lire les e-mails.

SMTP smtplib Le module smtplib définit un objet de session client SMTP qui peut être utilisé
quelle machine Internet avec un démon listner SMTP.

Telnet telnet Ce module fournit une classe Telnet qui implémente le protocole Telnet pour

Chacun d'eux est examiné en détail dans les chapitres suivants.

Python - Adresse IP
L'adresse IP (Internet Protocol) est un concept de mise en réseau fondamental qui fournit une
capacité d'attribution d'adresses dans un réseau. Le module pythonipaddressest largement
utilisé pour valider et classer les adresses IP en types IPV4 et IPV6. Il peut également être utilisé
pour comparer les valeurs d'adresse IP ainsi que l'arithmétique d'adresse IP pour manipuler les
adresses IP.

Validez l'adresse IPV4


La fonction ip_address valide l'adresse IPV4. Si la plage de valeurs est au-delà de 0 à 255, une
erreur est générée.

print (ipaddress.ip_address(u'192.168.0.255'))
print (ipaddress.ip_address(u'192.168.0.256'))

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -


192.168.0.255
ValueError: u'192.168.0.256' does not appear to be an IPv4 or IPv6 address

Validez l'adresse IPV6


La fonction ip_address valide l'adresse IPV6. Si la plage de valeurs est au-delà de 0 à ffff, cela
génère une erreur.

print (ipaddress.ip_address(u'FFFF:9999:2:FDE:257:0:2FAE:112D'))
#invalid IPV6 address
print (ipaddress.ip_address(u'FFFF:10000:2:FDE:257:0:2FAE:112D'))

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

ffff:9999:2:fde:257:0:2fae:112d
ValueError: u'FFFF:10000:2:FDE:257:0:2FAE:112D' does not appear to be an
IPv4 or IPv6 address

Vérifiez le type d'adresse IP


Nous pouvons fournir l'adresse IP de différents formats et le module sera en mesure de
reconnaître les formats valides. Il indiquera également de quelle catégorie d'adresse IP il s'agit.

print type(ipaddress.ip_address(u'192.168.0.255'))
print type(ipaddress.ip_address(u'2001:db8::'))
print ipaddress.ip_address(u'192.168.0.255').reverse_pointer
print ipaddress.ip_network(u'192.168.0.0/28')

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

255.0.168.192.in-addr.arpa 192.168.0.0/28

Comparison of IP Addresses
We can make a logical comparison of the IP addresses finding out if they are
equal or not. We can also compare if one IP address is greater than the other
in its value.

print (ipaddress.IPv4Address(u'192.168.0.2') >


ipaddress.IPv4Address(u'192.168.0.1'))
print (ipaddress.IPv4Address(u'192.168.0.2') ==
ipaddress.IPv4Address(u'192.168.0.1'))
print (ipaddress.IPv4Address(u'192.168.0.2') !=
ipaddress.IPv4Address(u'192.168.0.1'))

When we run the above program, we get the following output −

True
False
True

IP Addresses Arithmetic
We can also apply arithmetic operations to manipulate IP addresses. We can add
or subtract integers to an IP address. If after addition the value of the last
octet goes beyond 255 then the previous octet gets incremented to accommodate
the value. If the extra value can not be absorbed by any of the previous octet
then a value error is raised.

print (ipaddress.IPv4Address(u'192.168.0.2')+1)
print (ipaddress.IPv4Address(u'192.168.0.253')-3)
# Increases the previous octet by value 1.
print (ipaddress.IPv4Address(u'192.168.10.253')+3)
# Throws Value error
print (ipaddress.IPv4Address(u'255.255.255.255')+1)

When we run the above program, we get the following output −

192.168.0.3
192.168.0.250
192.168.11.0
AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4
address

Python - Recherche DNS


Les adresses IP, lorsqu'elles sont traduites dans des formats ou des mots lisibles par l'homme,
deviennent des noms de domaine. La traduction des noms de domaine en adresse IP est gérée
par le module pythondnspythonCe module fournit également des méthodes pour trouver les
enregistrements CNAME et MX.

Recherche d'un enregistrement 'A'


Dans le programme ci-dessous, nous trouvons l'adresse IP du domaine en utilisant la méthode
dns.resolver. Habituellement, ce mappage entre l'adresse IP et le nom de domaine est
également appelé enregistrement «A».
import dnspython as dns
import dns.resolver
result = dns.resolver.query('tutorialspoint.com', 'A')
for ipval in result:
print('IP', ipval.to_text())

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

('IP', u'94.130.81.180')

Recherche de la valeur CNAME


Un enregistrement CNAME également connu sous le nom d'enregistrement de nom canonique
est un type d'enregistrement dans le système de noms de domaine (DNS) utilisé pour mapper un
nom de domaine en tant qu'alias pour un autre domaine. Les enregistrements CNAME pointent
toujours vers un autre nom de domaine et jamais directement vers une adresse IP. Dans la
méthode de requête ci-dessous, nous spécifions le paramètre CNAME pour obtenir la valeur
CNAME.

import dnspython as dns


import dns.resolver
result = dns.resolver.query('mail.google.com', 'CNAME')
for cnameval in result:
print ' cname target address:', cnameval.target

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

cname target address: googlemail.l.google.com.

Recherche d'un enregistrement MX


Un enregistrement MX également appelé enregistrement de messagerie est un enregistrement
de ressource dans le système de noms de domaine qui spécifie un serveur de messagerie
chargé d'accepter les messages électroniques au nom du domaine d'un destinataire. Il définit
également la valeur de préférence utilisée pour donner la priorité à la remise du courrier si
plusieurs serveurs de messagerie sont disponibles. Semblable aux programmes ci-dessus, nous
pouvons trouver la valeur de l'enregistrement MX en utilisant le paramètre «MX» dans la
méthode de requête.

result = dns.resolver.query('mail.google.com', 'MX')


for exdata in result:
print ' MX Record:', exdata.exchange.text()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

MX Record: ASPMX.L.GOOGLE.COM.
MX Record: ALT1.ASPMX.L.GOOGLE.COM.
MX Record: ALT2.ASPMX.L.GOOGLE.COM.

Ce qui précède est un exemple de sortie et non l'exact.

Python - Routage
Le routage est le mécanisme de mappage de l'URL directement sur le code qui crée la page
Web. Il contribue à une meilleure gestion de la structure de la page Web et augmente
considérablement les performances du site et d'autres améliorations ou modifications deviennent
vraiment simples. En python, le routage est implémenté dans la plupart des travaux de cadre
Web. Nous verrons les exemples deflask cadre Web dans ce chapitre.

Routage dans Flask


le route()decorator dans Flask est utilisé pour lier une URL à une fonction. Par conséquent,
lorsque l'URL est mentionnée dans le navigateur, la fonction est exécutée pour donner le résultat.
Ici, URL'/hello' la règle est liée à la hello_world()fonction. En conséquence, si un utilisateur
visitehttp://localhost:5000/ URL, la sortie du hello_world() La fonction sera rendue dans le
navigateur.

from flask import Flask


app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello Tutorialspoint'
if __name__ == '__main__':
app.run()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

* Serving Flask app "flask_route" (lazy loading)


* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [06/Aug/2018 08:48:45] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [06/Aug/2018 08:48:46] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [06/Aug/2018 08:48:46] "GET /favicon.ico HTTP/1.1" 404 -

Nous ouvrons le navigateur et pointons vers l'URL http://localhost:5000/ pour voir le résultat de
la fonction en cours d'exécution.
Utilisation des variables d'URL
Nous pouvons transmettre des variables d'URL en utilisant route pour créer des URL à la volée.
Pour cela, nous utilisons la fonction url_for () qui accepte le nom de la fonction comme premier
argument et le reste des arguments comme partie variable de la règle URL.
Dans l'exemple ci-dessous, nous transmettons les noms de fonction en tant qu'arguments à la
fonction url_for et affichons le résultat lorsque ces lignes sont exécutées.

from flask import Flask, url_for


app = Flask(__name__)
@app.route('/')
def index(): pass
@app.route('/login')
def login(): pass
@app.route('/user/

') def profile(username): pass with app.test_request_context():


print url_for('index') print url_for('index', _external=True) print
url_for('login') print url_for('login', next='/') print url_for('profile',
username='Tutorials Point')

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -


/
http://localhost/
/login
/login?next=%2F
/user/Tutorials%20Point

Redirige
Nous pouvons utiliser la fonction de redirection pour rediriger l'utilisateur vers une autre URL en
utilisant le routage. Nous mentionnons la nouvelle URL comme valeur de retour de la fonction qui
devrait rediriger l'utilisateur. Ceci est utile lorsque nous détournons temporairement les
utilisateurs vers une page différente lorsque nous modifions une page Web existante.

from flask import Flask, abort, redirect, url_for


app = Flask(__name__)
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login')
def login():
abort(401)
# this_is_never_executed()

Lorsque le code ci-dessus est exécuté, l'URL de base va à la page de connexion qui utilise la
fonction d'abandon afin que le code de la page de connexion ne soit jamais exécuté.

Python - Requêtes HTTP


Le protocole http ou Hyper Text Transfer fonctionne sur le modèle client-serveur. Habituellement,
le navigateur Web est le client et l'ordinateur hébergeant le site Web est le serveur. EN python,
nous utilisons le module de requêtes pour créer les requêtes http. C'est un module très puissant
qui peut gérer de nombreux aspects de la communication http au-delà des simples données de
demande et de réponse. Il peut gérer l'authentification, la compression / décompression, les
demandes fragmentées, etc.
Un client HTTP envoie une requête HTTP à un serveur sous la forme d'un message de requête
qui comprend le format suivant:
 Une ligne de demande
 Zéro ou plus de champs d'en-tête (Général | Requête | Entité) suivis de CRLF
 Une ligne vide (c'est-à-dire une ligne sans rien précédant le CRLF) indiquant la fin des
champs d'en-tête
 Facultativement un corps de message
Les sections suivantes expliquent chacune des entités utilisées dans un message de requête
HTTP.
Request-Line
La Request-Line commence par un jeton de méthode, suivi de Request-URI et de la version du
protocole, et se termine par CRLF. Les éléments sont séparés par des caractères d'espace SP.

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

Discutons de chacune des parties mentionnées dans la Request-Line.

Méthode de demande
La demande method indique la méthode à exécuter sur la ressource identifiée par le Request-
URI. La méthode est sensible à la casse et doit toujours être mentionnée en majuscules. Le
tableau suivant répertorie toutes les méthodes prises en charge dans HTTP / 1.1.

SN Méthode et description

1 GET

La méthode GET est utilisée pour récupérer les informations du serveur donné en utilisant un URI don
doivent récupérer que des données et ne doivent avoir aucun autre effet sur les données.

2 HEAD

Identique à GET, mais il ne transfère que la ligne d'état et la section d'en-tête.

3 POST

Une requête POST est utilisée pour envoyer des données au serveur, par exemple des informations cli
à l'aide de formulaires HTML.

4 PUT

Remplace toutes les représentations actuelles de la ressource cible par le contenu téléchargé.

5 DELETE

Supprime toutes les représentations actuelles de la ressource cible données par URI.

6 CONNECT

Établit un tunnel vers le serveur identifié par un URI donné.

sept OPTIONS

Décrivez les options de communication pour la ressource cible.


8 TRACE

Effectue un test de boucle de message avec le chemin d'accès à la ressource cible.

Request-URI
Le Request-URI est un identificateur de ressource uniforme et identifie la ressource sur laquelle
appliquer la demande. Voici les formulaires les plus couramment utilisés pour spécifier un URI:

Request-URI = "*" | absoluteURI | abs_path | authority

SN Méthode et description

1 L'astérisque *est utilisé lorsqu'une requête HTTP ne s'applique pas à une ressource particulière, mais au serveu
lorsque la méthode utilisée ne s'applique pas nécessairement à une ressource. Par exemple:

OPTIONS * HTTP/1.1

2 le absoluteURIest utilisé lorsqu'une requête HTTP est adressée à un proxy. Le proxy est invité à transférer la de
valide et à renvoyer la réponse. Par exemple:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

3 La forme la plus courante de Request-URI est celle utilisée pour identifier une ressource sur un serveur ou une
client souhaitant récupérer une ressource directement depuis le serveur d'origine créerait une connexion TCP
et enverrait les lignes suivantes:

GET /pub/WWW/TheProject.html HTTP/1.1


Host: www.w3.org
Notez que le chemin absolu ne peut pas être vide; si aucun n'est présent dans l'URI d'origine, il DOIT ê
serveur).

Utiliser les requêtes Python


Nous utiliserons les requêtes de module pour en savoir plus sur la requête http.

pip install requests

Dans l'exemple ci-dessous, nous voyons un cas de requête GET simple et imprimons le résultat
de la réponse. Nous choisissons d'imprimer uniquement les 300 premiers caractères.

# How to make http request


import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!--> <html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial

Python - Réponse HTTP


Le protocole http ou Hyper Text Transfer fonctionne sur le modèle client-serveur. Habituellement,
le navigateur Web est le client et l'ordinateur hébergeant le site Web est le serveur. À la réception
d'une demande du client, le serveur génère une réponse et la renvoie au client dans un certain
format.
Après avoir reçu et interprété un message de requête, un serveur répond avec un message de
réponse HTTP:

 A Status-line

 Zero or more header (General|Response|Entity) fields followed by CRLF

 An empty line (i.e., a line with nothing preceding the CRLF)


indicating the end of the header fields
 Optionally a message-body

Les sections suivantes expliquent chacune des entités utilisées dans un message de réponse
HTTP.

Ligne d'état des messages


Une ligne d'état se compose de la version du protocole suivie d'un code d'état numérique et de
sa phrase textuelle associée. Les éléments sont séparés par des caractères d'espace SP.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

Version HTTP
Un serveur prenant en charge HTTP version 1.1 renverra les informations de version suivantes:

HTTP-Version = HTTP/1.1

Code d'état
L'élément Status-Code est un entier à 3 chiffres où le premier chiffre du Status-Code définit la
classe de réponse et les deux derniers chiffres n'ont aucun rôle de catégorisation. Il y a 5 valeurs
pour le premier chiffre:

SN Code et description

1 1xx: Informational

Cela signifie que la demande a été reçue et que le processus se poursuit.

2 2xx: Success

Cela signifie que l'action a été reçue, comprise et acceptée avec succès.

3 3xx: Redirection

Cela signifie que des mesures supplémentaires doivent être prises pour terminer la demande.

4 4xx: Client Error

Cela signifie que la demande contient une syntaxe incorrecte ou ne peut pas être satisfaite.

5 5xx: Server Error


Cela signifie que le serveur n'a pas réussi à répondre à une demande apparemment valide.

Les codes d'état HTTP sont extensibles et les applications HTTP ne sont pas obligées de
comprendre la signification de tous les codes d'état enregistrés.

Utilisation des requêtes Python


Dans le programme python ci-dessous, nous utilisons le module urllib3 pour faire une requête
http GET et recevoir la réponse contenant les données. Il fournit également le code de réponse
qui est également géré par les fonctions du module. L'objet PoolManager gère tous les détails du
regroupement de connexions et gère également la sécurité des threads.

import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'http://tutorialspoint.com/robots.txt')
print resp.data
# get the status of the response
print resp.status

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

User-agent: *
Disallow: /tmp
Disallow: /logs
Disallow: /rate/*
Disallow: /cgi-bin/*
Disallow: /videotutorials/video_course_view.php?*
Disallow: /videotutorials/course_view.php?*
Disallow: /videos/*
Disallow: /*/*_question_bank/*
Disallow: //*/*/*/*/src/*
200

Python - En-têtes HTTP


La demande et la réponse entre le client et le serveur impliquent l'en-tête et le corps du message.
Les en-têtes contiennent des informations spécifiques au protocole qui apparaissent au début du
message brut envoyé via la connexion TCP. Le corps du message est séparé des en-têtes par
une ligne vide.

Exemple d'en-têtes
Les en-têtes de la réponse http peuvent être classés dans les types suivants. Vous trouverez ci-
dessous une description de l'en-tête et un exemple.
Contrôle du cache
Le champ d'en-tête général Cache-Control est utilisé pour spécifier des directives qui DOIVENT
être respectées par tout le système de mise en cache. La syntaxe est la suivante:

Cache-Control : cache-request-directive|cache-response-directive

Un client ou serveur HTTP peut utiliser le Cache-controlen-tête général pour spécifier les
paramètres du cache ou pour demander certains types de documents du cache. Les directives
de mise en cache sont spécifiées dans une liste séparée par des virgules. Par exemple:

Cache-control: no-cache

Connexion
Le champ d'en-tête général de connexion permet à l'expéditeur de spécifier les options
souhaitées pour cette connexion particulière et ne doivent pas être communiquées par des
mandataires sur d'autres connexions. Voici la syntaxe simple pour utiliser l'en-tête de connexion:

Connection : "Connection"

HTTP / 1.1 définit l'option de connexion «fermer» pour l'expéditeur pour signaler que la
connexion sera fermée après l'achèvement de la réponse. Par exemple:

Connection: close

Par défaut, HTTP 1.1 utilise des connexions persistantes, où la connexion ne se ferme pas
automatiquement après une transaction. HTTP 1.0, en revanche, n'a pas de connexions
persistantes par défaut. Si un client 1.0 souhaite utiliser des connexions persistantes, il utilise
lekeep-alive paramètre comme suit:

Connection: keep-alive

Date
Tous les horodatages HTTP DOIVENT être représentés en heure moyenne de Greenwich
(GMT), sans exception. Les applications HTTP sont autorisées à utiliser l'une des trois
représentations suivantes des horodatages:

Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format

Encodage de transfert
Le champ d'en-tête général Transfer-Encoding indique quel type de transformation a été appliqué
au corps du message afin de le transférer en toute sécurité entre l'expéditeur et le destinataire.
Ce n'est pas la même chose que le codage de contenu car les codages de transfert sont une
propriété du message, pas du corps de l'entité. La syntaxe du champ d'en-tête Transfer-Encoding
est la suivante:

Transfer-Encoding: chunked

Toutes les valeurs de codage de transfert sont insensibles à la casse.

Améliorer
L'en -tête général Upgrade permet au client de spécifier les protocoles de communication
supplémentaires qu'il prend en charge et qu'il aimerait utiliser si le serveur juge approprié de
changer de protocole. Par exemple:

Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

Le champ d'en-tête Upgrade est destiné à fournir un mécanisme simple pour la transition de
HTTP / 1.1 à un autre protocole incompatible.

Via
L'en -tête général Via doit être utilisé par les passerelles et les mandataires pour indiquer les
protocoles intermédiaires et les destinataires. Par exemple, un message de requête peut être
envoyé d'un agent utilisateur HTTP / 1.0 à un proxy interne nommé "fred", qui utilise HTTP / 1.1
pour transmettre la requête à un proxy public sur nowhere.com, qui complète la requête en en le
transmettant au serveur d'origine à l'adresse www.ics.uci.edu. La demande reçue par
www.ics.uci.edu aurait alors le champ d'en-tête Via suivant:

Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Le champ d'en-tête Upgrade est destiné à fournir un mécanisme simple pour la transition de
HTTP / 1.1 à un autre protocole incompatible.

Attention
L'en -tête général Warning est utilisé pour transporter des informations supplémentaires sur l'état
ou la transformation d'un message qui peuvent ne pas être reflétées dans le message. Une
réponse peut porter plus d'un en-tête d'avertissement.

Warning : warn-code SP warn-agent SP warn-text SP warn-date

Exemple
Dans l'exemple ci-dessous, nous utilisons le module urllib2 pour obtenir une réponse en utilisant
urlopen. Ensuite, nous appliquons la méthode info () pour obtenir les informations d'en-tête pour
cette réponse.

import urllib2
response = urllib2.urlopen('http://www.tutorialspoint.com/python')
html = response.info()
print html

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Origin: *
Cache-Control: max-age=2592000
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Jul 2018 11:06:07 GMT
Expires: Wed, 01 Aug 2018 11:06:07 GMT
Last-Modified: Sun, 01 Jul 2018 21:05:38 GMT
Server: ECS (tir/CDD1)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 22063
Connection: close

Python - Requêtes HTTP personnalisées


Le protocole HTTP (Hypertext Transfer Protocol) est un protocole utilisé pour permettre les
communications entre les clients et les serveurs. Il fonctionne comme un protocole de demande-
réponse entre un client et un serveur. Le périphérique demandeur est appelé client et le
périphérique qui envoie la réponse est appelé serveur.
L'urllib est la bibliothèque python traditionnelle qui est utilisée dans les programmes python pour
gérer les requêtes http. Mais maintenant, il y a urllib3 qui fait plus que ce que faisait urllib. Nous
importons la bibliothèque urllib3 pour voir comment python peut l'utiliser pour faire une requête
http et recevoir une réponse. Nous pouvons personnaliser le type de demande en choisissant la
méthode de demande.

Pip install urllib3

Exemple
Dans l'exemple ci-dessous, nous utilisons l'objet PoolManager () qui s'occupe des détails de
connexion de la requête http. Ensuite, nous utilisons l'objet request () pour faire une requête http
avec la méthode POST. Enfin, nous utilisons également la bibliothèque json pour imprimer les
valeurs reçues au format json.

import urllib3
import json
http = urllib3.PoolManager()
r = http.request(
'POST',
'http://httpbin.org/post',
fields={'field': 'value'})
print json.loads(r.data.decode('utf-8'))['form']

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

{field': value'}

URL utilisant une requête


Nous pouvons également transmettre des paramètres de requête pour créer des URL
personnalisées. Dans l'exemple ci-dessous, la méthode de requête utilise les valeurs de la
chaîne de requête pour compléter l'URL qui peut être utilisée par une autre fonction du
programme python.

import requests

query = {'q': 'river', 'order': 'popular', 'min_width': '800',


'min_height': '600'}
req = requests.get('https://pixabay.com/en/photos/', params=query)

print(req.url)

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

https://pixabay.com/en/photos/?
q=river&min_width=800&min_height=600&order=popular

Python - Codes d'état des demandes


Après avoir reçu et interprété un message de demande, un serveur répond avec un message de
réponse HTTP. Le message de réponse a un code d'état. C'est un entier à 3 chiffres où le
premier chiffre du code d'état définit la classe de réponse et les deux derniers chiffres n'ont
aucun rôle de catégorisation. Il y a 5 valeurs pour le premier chiffre:

Codes d'état
SN Code et description

1 1xx: Informational

Cela signifie que la demande a été reçue et que le processus se poursuit.

2 2xx: Success
Cela signifie que l'action a été reçue, comprise et acceptée avec succès.

3 3xx: Redirection

Cela signifie que des mesures supplémentaires doivent être prises pour terminer la demande.

4 4xx: Client Error

Cela signifie que la demande contient une syntaxe incorrecte ou ne peut pas être satisfaite.

5 5xx: Server Error

Cela signifie que le serveur n'a pas réussi à répondre à une demande apparemment valide.

Réponse réussie
Dans l'exemple ci-dessous, nous accédons à un fichier à partir d'une URL et la réponse est
réussie. Le code d'état renvoyé est donc 200.

import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'http://tutorialspoint.com/robots.txt')
print resp.data
# get the status of the response
print resp.status

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

User-agent: *
Disallow: /tmp
Disallow: /logs
Disallow: /rate/*
Disallow: /cgi-bin/*
Disallow: /videotutorials/video_course_view.php?*
Disallow: /videotutorials/course_view.php?*
Disallow: /videos/*
Disallow: /*/*_question_bank/*
Disallow: //*/*/*/*/src/*
200
Réponse infructueuse
Dans l'exemple ci-dessous, nous accédons à un fichier à partir d'une URL qui n'existe pas. La
réponse échoue. Le code d'état renvoyé est donc 403.

import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'http://tutorialspoint.com/robot.txt')
print resp.data
# get the status of the response
print resp.status

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">


<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /robot.txt
on this server.</p>
</body></html>
403

Python - Authentification HTTP


L'authentification est le processus qui consiste à déterminer si la demande provient d'un
utilisateur valide qui dispose des privilèges requis pour utiliser le système. Dans le monde des
réseaux informatiques, c'est une exigence très vitale car de nombreux systèmes continuent
d'interagir les uns avec les autres et un mécanisme approprié doit garantir que seules des
interactions valides se produisent entre ces programmes.
Les noms des modules python requestsa une fonctionnalité intégrée pour appeler diverses API
fournies par les applications Web de service avec les informations d'identification de l'utilisateur.
Ces informations d'identification doivent être intégrées dans le programme appelant. Si les API le
vérifient avec succès, une connexion valide se produit.

Installation des demandes


Nous installons le module python requis nommé requêtes pour exécuter le programme
d'authentification.

pip install requests


S'authentifier sur Github
Ci-dessous, nous voyons un mécanisme d'authentification simple impliquant uniquement le nom
d'utilisateur et le mot de passe. Une réponse réussie indique une connexion valide.

import requests
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
print r

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

S'authentifier sur Twitter


Nous pouvons également exécuter un programme pour utiliser l'API de Twitter et effectuer une
connexion réussie en utilisant le code suivant. Nous utilisons la méthode OAuth1 disponible dans
le module de requêtes pour traiter les paramètres requis par l'API Twitter. Comme nous pouvons
le voir, le module de requêtes est capable de gérer un mécanisme d'authentification plus
complexe impliquant des clés et des jetons plutôt que simplement le mécanisme de nom
d'utilisateur et de mot de passe.

import requests
from requests_oauthlib import OAuth1
url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
requests.get(url, auth=auth)

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

{
"errors": [
{
"code": 215,
"message": "Bad Authentication data."
}
]
}

Mais en utilisant les valeurs appropriées pour les paramètres OAuth1, vous obtenez une réponse
réussie.
Python - Téléchargement de données
HTTP
Nous pouvons télécharger des données à partir d'un sereur en utilisant le module de python qui
gère ftp ou File Transfer Protocol. Nous pouvons également lire les données et les enregistrer
plus tard dans le système local.
Nous devons installer le module ftplib pour y parvenir.

pip install ftplib

Récupération des fichiers


Nous pouvons récupérer un fichier spécifique en utilisant le getfileméthode. Cette méthode
déplace une copie du fichier du système distant vers le système local à partir duquel la
connexion ftp a été initiée.

import ftplib
import sys

def getFile(ftp, filename):


try:
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
except:
print "Error"

ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")

ftp.cwd('/pub/') change directory to /pub/


getFile(ftp,'README.nluug')

ftp.quit()

Lorsque nous exécutons le programme ci-dessus, nous trouvons que le fichier README.nlug est
présent dans le système local à partir duquel la connexion a été initiée.

Lire les données


Dans l'exemple ci-dessous, nous utilisons le module urllib2 pour lire la partie requise des
données que nous pouvons copier et enregistrer sur le système local.
Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -
import urllib2
response = urllib2.urlopen('http://www.tutorialspoint.com/python')
html = response.read(200)
print html

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!--> <html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="ut

Python - Réutilisation de la connexion


Lorsqu'un client fait une demande valide à un serveur, une connexion temporaire est établie
entre eux pour terminer le processus d'envoi et de réception. Mais il existe des scénarios où la
connexion doit être maintenue active car il y a besoin de requêtes et de réponses automatiques
entre les programmes qui communiquent. Prenons par exemple une page Web interactive. Une
fois la page Web chargée, il est nécessaire de soumettre des données de formulaire ou de
télécharger d'autres composants CSS et JavaScript. La connexion doit être maintenue active
pour des performances plus rapides et une communication ininterrompue entre le client et le
serveur.
Python fournit urllib3module qui avait des méthodes pour prendre en charge la réutilisation des
connexions entre un client et un serveur. Dans l'exemple ci-dessous, nous créons une connexion
et effectuons plusieurs requêtes en passant différents paramètres avec la requête GET. Nous
recevons plusieurs réponses mais nous comptons également le nombre de connexions qui ont
été utilisées dans le processus. Comme on le voit, le nombre de connexion ne change pas, ce
qui implique la réutilisation de la connexion.

from urllib3 import HTTPConnectionPool


pool = HTTPConnectionPool('ajax.googleapis.com', maxsize=1)
r = pool.request('GET', '/ajax/services/search/web',
fields={'q': 'python', 'v': '1.0'})
print 'Response Status:', r.status
# Header of the response
print 'Header: ',r.headers['content-type']
# Content of the response
print 'Python: ',len(r.data)
r = pool.request('GET', '/ajax/services/search/web',
fields={'q': 'php', 'v': '1.0'})
# Content of the response
print 'php: ',len(r.data)
print 'Number of Connections: ',pool.num_connections
print 'Number of requests: ',pool.num_requests

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Response Status: 200


Header: text/javascript; charset=utf-8
Python: 211
php: 211
Number of Connections: 1
Number of requests: 2

Python - Interface réseau


Lorsque nous avons plusieurs interfaces dans une machine, nous devons garder une trace de
leurs noms, statuts, etc. En Python, nous pouvons lister les interfaces et leur statut.

Exemple
Dans l'exemple ci-dessous, nous utilisons le module python netifacesqui donne les détails des
interfaces et leur état. Les méthodes utilisées sont très simples et directes.

import netifaces
print (netifaces.interfaces())
print (netifaces.ifaddresses('lo'))
print (netifaces.AF_LINK)
addrs = netifaces.ifaddresses('ens33')
print(addrs[netifaces.AF_INET])
print(addrs[netifaces.AF_LINK])

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

# Result
['lo', 'ens33']
{17: [{'peer': '00:00:00:00:00:00', 'addr': '00:00:00:00:00:00'}], 2:
[{'peer': '127.0.0.1', 'addr': '127.0.0.1', 'netmask': '255.0.0.0'}], 10:
[{'addr': '::1', 'netmask':
'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128'}]}
17
[{'netmask': '255.255.255.0', 'addr': '192.168.232.128', 'broadcast':
'192.168.232.255'}]
[{'addr': '00:0c:29:ea:13:0a', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]

Python - Programmation de sockets


Python fournit deux niveaux d'accès aux services réseau. À un niveau bas, vous pouvez accéder
à la prise en charge de socket de base dans le système d'exploitation sous-jacent, qui vous
permet d'implémenter des clients et des serveurs pour les protocoles orientés connexion et sans
connexion.
Python dispose également de bibliothèques qui fournissent un accès de niveau supérieur à des
protocoles réseau spécifiques au niveau de l'application, tels que FTP, HTTP, etc.
Les sockets sont les extrémités d'un canal de communication bidirectionnel. Les sockets peuvent
communiquer au sein d'un processus, entre des processus sur la même machine ou entre des
processus sur différents continents. Nous utilisons le module socket en python pour créer et
utiliser des sockets.
Les sockets ont leur propre vocabulaire -

Sr.No. Terme et description

1 Domain
Famille de protocoles utilisée comme mécanisme de transport. Ces valeurs sont des constantes telle
PF_UNIX, PF_X25, etc.

2 type
Type de communication entre les deux points de terminaison, généralement SOCK_STREAM pou
SOCK_DGRAM pour les protocoles sans connexion.

3 protocol
Typiquement zéro, cela peut être utilisé pour identifier une variante d'un protocole dans un domain

4 hostname
L'identifiant d'une interface réseau -
 Une chaîne, qui peut être un nom d'hôte, une adresse à quatre points ou une adresse IPV6 en
éventuellement un point)
 Une chaîne "<broadcast>", qui spécifie une adresse INADDR_BROADCAST.
 Une chaîne de longueur nulle, qui spécifie INADDR_ANY, ou
 Un entier, interprété comme une adresse binaire dans l'ordre des octets de l'hôte.

5 port
Chaque serveur écoute les clients appelant sur un ou plusieurs ports. Un port peut être un numéro d
un numéro de port ou le nom d'un service.
Le module de prise
Pour créer une socket, vous devez utiliser la fonction socket.socket () disponible dans le
module socket , qui a la syntaxe générale -

s = socket.socket (socket_family, socket_type, protocol=0)

Voici la description des paramètres -


 socket_family - Il s'agit soit d'AF_UNIX, soit d'AF_INET, comme expliqué
précédemment.
 socket_type - Il s'agit soit de SOCK_STREAM, soit de SOCK_DGRAM.
 protocol - Ceci est généralement laissé de côté, par défaut à 0.
Une fois que vous avez un objet socket , vous pouvez utiliser les fonctions requises pour créer
votre programme client ou serveur.

Méthodes de socket serveur


Sr.No. Méthode et description

1 s.bind()
Cette méthode lie l'adresse (nom d'hôte, paire de numéros de port) au socket.

2 s.listen()
Cette méthode configure et démarre l'écouteur TCP.

3 s.accept()
Cela accepte passivement la connexion client TCP, en attendant que la connexion arrive (blocag

Méthodes de socket client


Sr.No. Méthode et description

1 s.connect()
Cette méthode initie activement la connexion au serveur TCP.

Méthodes générales de socket


Sr.No. Méthode et description

1 s.recv()
Cette méthode reçoit un message TCP

2 s.send()
Cette méthode transmet le message TCP

3 s.recvfrom()
Cette méthode reçoit un message UDP

4 s.sendto()
Cette méthode transmet un message UDP

5 s.close()
Cette méthode ferme le socket

6 socket.gethostname()
Renvoie le nom d'hôte.

Un serveur simple
Pour écrire des serveurs Internet, nous utilisons le socketfonction disponible dans le module
socket pour créer un objet socket. Un objet socket est ensuite utilisé pour appeler d'autres
fonctions afin de configurer un serveur socket.
Appelez maintenant bind(hostname, port)pour spécifier un port pour votre service sur l'hôte
donné.
Ensuite, appelez la méthode accept de l'objet retourné. Cette méthode attend jusqu'à ce qu'un
client se connecte au port que vous avez spécifié, puis renvoie un objet de connexion qui
représente la connexion à ce client.

#!/usr/bin/python # This is server.py file


import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection

Un client simple
Écrivons un programme client très simple qui ouvre une connexion vers un port donné 12345 et
un hôte donné. C'est très simple de créer un client socket en utilisant la fonction de
module socket de Python .
le socket.connect(hosname, port )ouvre une connexion TCP au nom d' hôte sur le port . Une
fois que vous avez une socket ouverte, vous pouvez la lire comme n'importe quel objet IO. Une
fois terminé, n'oubliez pas de le fermer, comme vous le feriez pour un fichier.
Le code suivant est un client très simple qui se connecte à un hôte et un port donnés, lit toutes
les données disponibles à partir du socket, puis quitte -

#!/usr/bin/python # This is client.py file


import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close # Close the socket when done

Maintenant, exécutez ce server.py en arrière-plan, puis exécutez ci-dessus client.py pour voir le
résultat.

# Following would start a server in background.


$ python server.py & # Once server is started run client as follows: $
python client.py

Cela produirait le résultat suivant -

Got connection from ('127.0.0.1', 48437)


Thank you for connecting

Socket avec URL publique


Dans l'exemple ci-dessous, nous utilisons quelques méthodes du module socket pour trouver les
informations d'adresse du serveur et les détails du nom d'hôte.

import socket
from pprint import pprint
# get server address
addrinfo = socket.getaddrinfo('tutorialspoint.com', 'www')
pprint(addrinfo)
# get server hostname
print socket.gethostname()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

[(2, 1, 0, '', ('94.130.81.180', 80))]


DESKTOP-JXYKQCPLP

Python - Client HTTP


Dans le protocole http, la requête du client atteint le serveur et récupère certaines données et
métadonnées en supposant qu'il s'agit d'une requête valide. Nous pouvons analyser cette
réponse du serveur à l'aide de diverses fonctions disponibles dans le module de requêtes python.
Ici, les programmes python ci-dessous s'exécutent côté client et affichent le résultat de la
réponse envoyée par le serveur.

Obtenez la réponse initiale


Dans le programme ci-dessous, le module get method from requests récupère les données d'un
serveur et elles sont imprimées au format texte brut.

import requests
r = requests.get('https://httpbin.org/')
print(r.text)[:200]

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

<!DOCTYPE html >


<html lang="en">
<head>
<meta charset="UTF-8">
<title>httpbin.org</title>
<link
href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|
Source+Code+Pro:300,600|Titillium+

Obtenir la réponse d'un objet de session


L'objet Session vous permet de conserver certains paramètres entre les demandes. Il persiste
également les cookies dans toutes les demandes effectuées à partir de l'instance Session. Si
vous faites plusieurs requêtes au même hôte, la connexion TCP sous-jacente sera réutilisée.

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/31251425')
r = s.get('http://httpbin.org/cookies')
print(r.text)

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

{"cookies":{"sessioncookie":"31251425"}}

Erreur de traitement
Dans le cas où une erreur est déclenchée en raison d'un problème de traitement de la demande
par le serveur, le programme python peut gérer correctement l'exception déclenchée à l'aide du
paramètre timeout comme indiqué ci-dessous. Le programme attendra la valeur définie de
l'erreur de temporisation, puis lèvera l'erreur de temporisation.

requests.get('http://github.com', timeout=10.001)

Python - Serveur HTTP


La bibliothèque standard Python est livrée avec un serveur Web intégré qui peut être appelé pour
une communication simple avec le client Web. Le numéro de port peut être attribué par
programme et le serveur Web est accessible via ce port. Bien qu'il ne s'agisse pas d'un serveur
Web complet capable d'analyser de nombreux types de fichiers, il peut analyser de simples
fichiers HTML statiques et les servir en leur répondant avec les codes de réponse requis.
Le programme ci-dessous démarre un serveur Web simple et l'ouvre au port 8001. L'exécution
réussie du serveur est indiquée par le code de réponse 200 comme indiqué dans la sortie du
programme.

import SimpleHTTPServer
import SocketServer
PORT = 8001
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

serving at port 8001


127.0.0.1 - - [14/Jun/2018 08:34:22] "GET / HTTP/1.1" 200 -

Servir un hôte local


Si nous décidons de faire du serveur python un hôte local servant uniquement l'hôte local, nous
pouvons utiliser le programme suivant pour le faire.

import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
HandlerClass = SimpleHTTPRequestHandler
ServerClass = BaseHTTPServer.HTTPServer
Protocol = "HTTP/1.0"
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8000
server_address = ('127.0.0.1', port)
HandlerClass.protocol_version = Protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Serving HTTP on 127.0.0.1 port 8000 ...

Python - Création d'URL


Le module de requêtes peut nous aider à créer les URL et à manipuler la valeur de l'URL de
manière dynamique. Tout sous-répertoire de l'URL peut être récupéré par programme, puis une
partie de celui-ci peut être remplacée par de nouvelles valeurs pour créer de nouvelles URL.

Build_URL
L'exemple ci-dessous utilise urljoinpour récupérer les différents sous-dossiers dans le chemin de
l'URL. La méthode urljoin est utilisée pour ajouter de nouvelles valeurs à l'URL de base.

from requests.compat import urljoin


base='https://stackoverflow.com/questions/3764291'
print urljoin(base,'.')
print urljoin(base,'..')
print urljoin(base,'...')
print urljoin(base,'/3764299/')
url_query = urljoin(base,'?vers=1.0')
print url_query
url_sec = urljoin(url_query,'#section-5.4')
print url_sec
Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

https://stackoverflow.com/questions/
https://stackoverflow.com/
https://stackoverflow.com/questions/...
https://stackoverflow.com/3764299/
https://stackoverflow.com/questions/3764291?vers=1.0
https://stackoverflow.com/questions/3764291?vers=1.0#section-5.4

Diviser les URL


Les URL peuvent également être divisées en plusieurs parties au-delà de l'adresse principale.
Les paramètres supplémentaires qui sont utilisés pour une requête spécifique ou des balises
attachées à l'URL sont séparés à l'aide de la méthode urlparse comme indiqué ci-dessous.

from requests.compat import urlparse


url1 = 'https://docs.python.org/2/py-modindex.html#cap-f'
url2='https://docs.python.org/2/search.html?q=urlparse'
print urlparse(url1)
print urlparse(url2)

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

ParseResult(scheme='https', netloc='docs.python.org', path='/2/py-


modindex.html', params='', query='', fragment='cap-f')
ParseResult(scheme='https', netloc='docs.python.org',
path='/2/search.html', params='', query='q=urlparse', fragment='')

Python - Soumission WebForm


L'interaction avec une page Web nécessite souvent que certaines données soient soumises au
serveur via les formulaires présents dans la page html. Ces formulaires Web sont généralement
utilisés pour des processus tels que la création d'un nouveau compte ou la fourniture
d'informations telles que le nom ou le numéro de rôle pour récupérer le résultat d'un examen.
lerequests module gère cela avec élégance en utilisant la méthode POST avec les paramètres
requis.

Exemple
Dans l'exemple ci-dessous, nous utilisons le formulaire d'inscription d'un site Web en fournissant
l'ID utilisateur et le mot de passe. Après la soumission des valeurs, nous imprimons la réponse.

import requests
ID_USERNAME = 'signup-user-name'
ID_PASSWORD = 'signup-user-password'
USERNAME = 'username'
PASSWORD = 'yourpassword'
SIGNUP_URL = 'http://codepad.org/login'
def submit_form():
"""Submit a form"""
payload = {ID_USERNAME : USERNAME, ID_PASSWORD : PASSWORD,}
resp = requests.get(SIGNUP_URL)
print "Response to GET request: %s" %resp.content
resp = requests.post(SIGNUP_URL, payload)
print "Headers from a POST request response: %s" %resp.headers
#print "HTML Response: %s" %resp.read()
if __name__ == '__main__':
submit_form()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Response to GET request: <!DOCTYPE html>


<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
<meta HTTP-EQUIV="Expires" CONTENT="-1">
<title>Login - codepad</title>

<link href="/main.css" media="screen" rel="stylesheet"


type="text/css" />
<style type="text/css">

</style>
<script src='https://www.google.com/recaptcha/api.js'></script>
<script>
function onRecaptcha(token) {
document.getElementById("editor-form").submit();
}
</script>
</head>
<body >
.....................
.....................

Python - Bases de données et SQL


Le langage de programmation Python possède de puissantes fonctionnalités pour la
programmation de bases de données. Python prend en charge diverses bases de données
comme SQLite, MySQL, Oracle, Sybase, PostgreSQL, etc. Python prend également en charge le
langage de définition de données (DDL), le langage de manipulation de données (DML) et les
instructions de requête de données. La norme Python pour les interfaces de base de données
est l'API DB Python. La plupart des interfaces de base de données Python adhèrent à cette
norme.
Voici la liste des interfaces de base de données Python disponibles: Interfaces de base de
données Python et API . Vous devez télécharger un module DB API distinct pour chaque base de
données à laquelle vous devez accéder.
Dans ce chapitre, nous verrons l'utilisation de la base de données SQLite dans le langage de
programmation python. Cela se fait en utilisant le module sqlite3 intégré de python. Vous devez
d'abord créer un objet de connexion qui représente la base de données, puis créer des objets
curseur pour exécuter des instructions SQL.

Se connecter à la base de données


Le code Python suivant montre comment se connecter à une base de données existante. Si la
base de données n'existe pas, elle sera créée et finalement un objet de base de données sera
renvoyé.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";

Ici, vous pouvez également fournir le nom de la base de données comme nom
spécial :memory:pour créer une base de données en RAM. Maintenant, exécutons le
programme ci-dessus pour créer notre base de donnéestest.dbdans le répertoire courant. Vous
pouvez changer votre chemin selon vos besoins. Conservez le code ci-dessus dans le fichier
sqlite.py et exécutez-le comme indiqué ci-dessous. Si la base de données est créée avec succès,
elle affichera le message suivant.

$chmod +x sqlite.py $./sqlite.py


Open database successfully

Créer une table


Le programme Python suivant sera utilisé pour créer une table dans la base de données
précédemment créée.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print "Table created successfully";
conn.close()

Lorsque le programme ci-dessus est exécuté, il créera la table COMPANY dans votre test.db et
il affichera les messages suivants -

Opened database successfully


Table created successfully

Insérer une opération


Le programme Python suivant montre comment créer des enregistrements dans la table
COMPANY créée dans l'exemple ci-dessus.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (1, 'Paul', 32, 'California', 20000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");
conn.commit()
print "Records created successfully";
conn.close()

Lorsque le programme ci-dessus est exécuté, il créera les enregistrements donnés dans la table
COMPANY et affichera les deux lignes suivantes -
Opened database successfully
Records created successfully

Sélectionnez l'opération
Le programme Python suivant montre comment récupérer et afficher les enregistrements de la
table COMPANY créée dans l'exemple ci-dessus.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()

Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant.

Opened database successfully


ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully

Opération de mise à jour


Le code Python suivant montre comment utiliser l'instruction UPDATE pour mettre à jour
n'importe quel enregistrement, puis récupérer et afficher les enregistrements mis à jour à partir
de la table COMPANY.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")
conn.commit
print "Total number of rows updated :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()

Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant.

Opened database successfully


Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 25000.0
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully

Supprimer l'opération
Le code Python suivant montre comment utiliser l'instruction DELETE pour supprimer n'importe
quel enregistrement, puis extraire et afficher les enregistrements restants de la table COMPANY.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute("DELETE from COMPANY where ID = 2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()

Lorsque le programme ci-dessus est exécuté, il produira le résultat suivant.

Opened database successfully


Total number of rows deleted : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully

Python - Telnet
Telnet est un type de protocole réseau qui permet à un utilisateur d'un ordinateur de se connecter
à un autre ordinateur qui appartient également au même réseau. La commande telnet est utilisée
avec le nom d'hôte, puis les informations d'identification de l'utilisateur sont saisies. Lors d'une
connexion réussie, l'utilisateur distant peut accéder aux applications et aux données d'une
manière similaire à l'utilisateur régulier du système. Bien entendu, certains privilèges peuvent
être contrôlés par l'administrateur du système qui installe et maintient le système.
En Python, telnet est implémenté par le module telnetlib qui a la classe Telnet qui a les méthodes
requises pour établir la connexion. Dans l'exemple ci-dessous, nous utilisons également le
module getpass pour gérer l'invite de mot de passe dans le cadre du processus de connexion.
Nous supposons également que la connexion est établie avec un hôte unix. Les différentes
méthodes de la classe telnetlib.Telnet utilisées dans le programme sont expliquées ci-dessous.
 Telnet.read_until - Lecture jusqu'à ce qu'une chaîne donnée, attendue, soit rencontrée ou
jusqu'à ce que les secondes du délai d'attente se soient écoulées.
 Telnet.write - Ecrit une chaîne dans le socket, doublant tous les caractères IAC. Cela
peut bloquer si la connexion est bloquée. Peut soulever socket.error si la connexion est
fermée.
 Telnet.read_all () - Lit toutes les données jusqu'à EOF; bloquer jusqu'à la fermeture de la
connexion.

Exemple
import getpass
import telnetlib
HOST = "http://localhost:8000/"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

- lrwxrwxrwx 1 0 0 1 Nov 13 2012 ftp -> .


- lrwxrwxrwx 1 0 0 3 Nov 13 2012 mirror -> pub
- drwxr-xr-x 23 0 0 4096 Nov 27 2017 pub
- drwxr-sr-x 88 0 450 4096 May 04 19:30 site
- drwxr-xr-x 9 0 0 4096 Jan 23 2014 vol

Veuillez noter que cette sortie est spécifique à l'ordinateur distant dont les détails sont soumis
lorsque le programme est exécuté.

Python - Messages électroniques


Le courrier électronique est un service qui nous permet d'envoyer le message en mode
électronique sur Internet. Il offre un moyen efficace, peu coûteux et en temps réel de diffuser des
informations entre les personnes.

Adresse e-mail
Chaque utilisateur de messagerie se voit attribuer un nom unique pour son compte de
messagerie. Ce nom est appelé adresse e-mail. Différents utilisateurs peuvent envoyer et
recevoir des messages en fonction de l'adresse e-mail.
Le courrier électronique est généralement de la forme nom d'utilisateur @ nom de domaine. Par
exemple, webmaster@tutorialspoint.com est une adresse e-mail où webmaster est le nom
d'utilisateur et tutorialspoint.com est le nom de domaine.
 Le nom d'utilisateur et le nom de domaine sont séparés par @ (at) symbole.
 Les adresses e-mail ne sont pas sensibles à la casse.
 Les espaces ne sont pas autorisés dans l'adresse e-mail.
Les cinq premières lignes d'un message électronique sont appelées en-tête de courrier
électronique. La partie d'en-tête comprend les champs suivants:
 From
 Date
 To
 Subject
 CC
 BCC

De
le From Le champ indique l'adresse de l'expéditeur, c'est-à-dire qui a envoyé l'e-mail.
Date
le Date indique la date à laquelle l'e-mail a été envoyé.

À
le To Le champ indique l'adresse du destinataire, c'est-à-dire à qui l'e-mail est envoyé.

Matière
le SubjectLe champ indique le but de l'e-mail. Il doit être précis et pertinent.

CC
CCsignifie copie carbone. Il comprend les adresses des destinataires que nous souhaitons tenir
informés, mais pas exactement le destinataire prévu.

BCC
BCCsignifie Black Carbon Copy. Il est utilisé lorsque nous ne voulons pas qu'un ou plusieurs
destinataires sachent que quelqu'un d'autre a été copié sur le message.

Salutation
La salutation est l'ouverture du message réel. Par exemple. Salut Monsieur ou Salut les gars, etc.

Texte
Il représente le contenu réel du message.

Signature
Il s'agit de la dernière partie d'un message électronique. Il comprend le nom de l'expéditeur,
l'adresse et le numéro de contact.
Python a une classe EmailMessage qui peut être utilisée pour créer des messages électroniques.
Cette classe comprend les méthodes requises pour personnaliser différentes parties du message
électronique, telles que les balises TO et FROM, la ligne d'objet ainsi que le contenu de l'e-mail.

Exemple
Dans l'exemple ci-dessous, nous créons un e-mail avec toutes les parties nécessaires d'un e-
mail. Une fois que nous imprimons le contenu du message, nous pouvons voir l'e-mail complet.

import email.message, email.policy, email.utils, sys


text = """Welcome to TutorialsPoint - Simple Easy Learning"""
message = email.message.EmailMessage(email.policy.SMTP)
message['To'] = 'you@yourdomain.com'
message['From'] = 'Learn

' message['Subject'] = 'A mail To you' message['Date'] =


email.utils.formatdate(localtime=True) message['Message-ID'] =
email.utils.make_msgid() message.set_content(text)
sys.stdout.buffer.write(message.as_bytes())

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

To: you@yourdomain.com
From: Learn

Subject: A mail To you Date: Wed, 13 Jun 2018 06:51:09 -0700


Message-ID: <152889786976.4106.5718297150260802709@ubuntu> Content-Type:
text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit MIME-Version:
1.0 Welcome to TutorialsPoint - Simple Easy Learning

Python - SMTP
Le protocole SMTP (Simple Mail Transfer Protocol) est un protocole qui gère l'envoi d'un e-mail
et le routage des e-mails entre les serveurs de messagerie.
Python fournit smtplib module, qui définit un objet de session client SMTP qui peut être utilisé
pour envoyer des e-mails à n'importe quelle machine Internet avec un démon d'écoute SMTP ou
ESMTP.
Un objet SMTP a une méthode d'instance appelée sendmail, qui est généralement utilisé pour
effectuer le travail d'envoi d'un message. Il faut trois paramètres -
 L' expéditeur - Une chaîne avec l'adresse de l'expéditeur.
 Les destinataires - Une liste de chaînes, une pour chaque destinataire.
 Le message - Un message sous forme de chaîne formatée comme spécifié dans les
diverses RFC.

Exemple
Voici un moyen simple d'envoyer un e-mail à l'aide d'un script Python. Essayez-le une fois -

#!/usr/bin/python3
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"

Ici, vous avez placé un e-mail de base dans un message, en utilisant un triple guillemet, en
prenant soin de formater correctement les en-têtes. Un e-mail nécessite unFrom, To, et
un Subject en-tête, séparé du corps de l'e-mail par une ligne vide.
Pour envoyer le courrier, utilisez smtpObj pour vous connecter au serveur SMTP sur la machine
locale. Ensuite, utilisez la méthode sendmail avec le message, l'adresse d'expédition et l'adresse
de destination comme paramètres (même si les adresses de départ et d'arrivée se trouvent dans
l'e-mail lui-même, elles ne sont pas toujours utilisées pour acheminer le courrier).
Si vous n'exécutez pas de serveur SMTP sur votre ordinateur local, vous pouvez utiliser le
client smtplib pour communiquer avec un serveur SMTP distant. Sauf si vous utilisez un service
de messagerie Web (tel que gmail ou Yahoo! Mail), votre fournisseur de messagerie doit vous
avoir fourni les détails du serveur de messagerie sortant que vous pouvez leur fournir, comme
suit:

mail = smtplib.SMTP('smtp.gmail.com', 587)

Envoi d'un e-mail HTML à l'aide de Python


Lorsque vous envoyez un message texte en utilisant Python, tout le contenu est traité comme un
simple texte. Même si vous incluez des balises HTML dans un message texte, celui-ci s'affiche
sous forme de texte simple et les balises HTML ne seront pas formatées selon la syntaxe HTML.
Cependant, Python fournit une option pour envoyer un message HTML en tant que message
HTML réel.
Lors de l'envoi d'un e-mail, vous pouvez spécifier une version Mime, un type de contenu et le jeu
de caractères pour envoyer un e-mail HTML.

Exemple
Voici un exemple pour envoyer le contenu HTML sous forme de courrier électronique. Essayez-le
une fois -

#!/usr/bin/python3
import smtplib
message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"

Python - POP3
Le protocole pop3 est un protocole de messagerie pour télécharger des messages à partir du
serveur de messagerie. Ces messages peuvent être stockés sur la machine locale.
Key Points
 POP est un protocole standard Internet de la couche application.
 Puisque POP prend en charge l'accès hors ligne aux messages, nécessite donc moins
de temps d'utilisation d'Internet.
 POP n'autorise pas la fonction de recherche.
 Pour accéder aux messages, il est nécessaire de les télécharger.
 Il permet de créer une seule boîte aux lettres sur le serveur.
 Il ne convient pas pour accéder aux données non électroniques.
 Les commandes POP sont généralement abrégées en codes de trois ou quatre lettres.
Par exemple. STAT.

Commandes POP
Le tableau suivant décrit certaines des commandes POP:

SN Description de la commande

1 LOGIN
Cette commande ouvre la connexion.

2 STAT
Il est utilisé pour afficher le nombre de messages actuellement dans la boîte aux lettres.

3 LIST
Il est utilisé pour obtenir le résumé des messages où chaque résumé de message est affiché.

4 RETR
Cette commande permet de sélectionner une boîte aux lettres pour accéder aux messages.

5 DELE
Il est utilisé pour supprimer un message.

6 RSET
Il est utilisé pour réinitialiser la session à son état initial.

sept QUIT
Il est utilisé pour fermer la session.

Pyhton poplibmodule fournit des classes nommées pop () et pop3_SSL () qui sont utilisées pour
répondre à cette exigence. Nous fournissons le nom d'hôte et le numéro de port comme
argument. Dans l'exemple ci-dessous, nous nous connectons à un serveur gmail et récupérons
les messages après avoir fourni les informations de connexion.

import poplib
user = 'username'
# Connect to the mail box
Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995')
Mailbox.user(user)
Mailbox.pass_('password')
NumofMessages = len(Mailbox.list()[1])
for i in range(NumofMessages):
for msg in Mailbox.retr(i+1)[1]:
print msg
Mailbox.quit()

Les messages sont récupérés lorsque le programme ci-dessus est exécuté.

Python - IMAP
IMAP est un protocole de récupération des e-mails qui ne télécharge pas les e-mails. Il les lit
simplement et les affiche. Ceci est très utile dans des conditions de faible bande passante.
Bibliothèque côté client de Python appeléeimaplib est utilisé pour accéder aux e-mails via le
protocole imap.
IMAP signifie Internet Mail Access Protocol. Il a été proposé pour la première fois en 1986.
Key Points:
 IMAP permet au programme client de manipuler le message électronique sur le serveur
sans les télécharger sur l'ordinateur local.
 L'e-mail est conservé et conservé par le serveur distant.
 Il nous permet de prendre toutes les mesures telles que le téléchargement, la
suppression du courrier sans lire le courrier.Il nous permet de créer, manipuler et
supprimer des dossiers de messages distants appelés boîtes aux lettres.
 IMAP permet aux utilisateurs de rechercher les e-mails.
 Il permet un accès simultané à plusieurs boîtes aux lettres sur plusieurs serveurs de
messagerie.

Commandes IMAP
Le tableau suivant décrit certaines des commandes IMAP:

SN Description de la commande

1 IMAP_LOGIN
Cette commande ouvre la connexion.

2 CAPABILITY
Cette commande demande la liste des fonctionnalités prises en charge par le serveur.

3 NOOP
Cette commande est utilisée comme interrogation périodique des nouveaux messages ou des mises à jour de
période d'inactivité.

4 SELECT
Cette commande permet de sélectionner une boîte aux lettres pour accéder aux messages.

5 EXAMINE
C'est la même chose que la commande SELECT sauf qu'aucune modification de la boîte aux lettres n'est autor

6 CREATE
Il est utilisé pour créer une boîte aux lettres avec un nom spécifié.

sept DELETE
Il est utilisé pour supprimer définitivement une boîte aux lettres avec un nom donné.

8 RENAME
Il est utilisé pour changer le nom d'une boîte aux lettres.
9 LOGOUT
Cette commande informe le serveur que le client a terminé la session. Le serveur doit envoyer une réponse BY
fermer la connexion réseau.

Exemple
Dans l'exemple ci-dessous, nous nous connectons à un serveur Gmail avec les informations
d'identification de l'utilisateur. Ensuite, nous choisissons d'afficher les messages dans la boîte de
réception. Une boucle for est utilisée pour afficher les messages récupérés un par un et
finalement la connexion est fermée.

import imaplib
import pprint
imap_host = 'imap.gmail.com'
imap_user = 'username@gmail.com'
imap_pass = 'password'
# connect to host using SSL
imap = imaplib.IMAP4_SSL(imap_host)
## login to server
imap.login(imap_user, imap_pass)
imap.select('Inbox')
tmp, data = imap.search(None, 'ALL')
for num in data[0].split():
tmp, data = imap.fetch(num, '(RFC822)')
print('Message: {0}\n'.format(num))
pprint.pprint(data[0][1])
break
imap.close()

Selon la configuration de la boîte aux lettres, le courrier est affiché.

Python - SSH
SSH ou Secure Socket Shell, est un protocole réseau qui fournit un moyen sécurisé d'accéder à
un ordinateur distant. Secure Shell fournit une authentification forte et des communications de
données cryptées sécurisées entre deux ordinateurs se connectant sur un réseau non sécurisé
tel qu'Internet. SSH est largement utilisé par les administrateurs réseau pour gérer les systèmes
et les applications à distance, leur permettant de se connecter à un autre ordinateur via un
réseau, d'exécuter des commandes et de déplacer des fichiers d'un ordinateur à un autre.
À mesure que les serveurs cloud deviennent plus abordables, SSH est l'outil le plus couramment
utilisé pour effectuer diverses tâches sur un serveur cloud. Nous en avons besoin pour &; moins
 Configurer un serveur Web pour le site Web d'un client
 Déployer le code source sur un serveur de production
En python, SSH est implémenté à l'aide de la bibliothèque python appelée fabric. Il peut être
utilisé pour émettre des commandes à distance via SSH.

Exemple
Dans l'exemple ci-dessous, nous nous connectons à un hôte et émettons la commande pour
identifier le type d'hôte. Nous capturons le résultat et l'afficherons sous forme de texte formaté.

from fabric import Connection


result = Connection('xyz.com').run('uname -s')
msg = "Ran {.command!r} on {.connection.host}, got stdout:\n{.stdout}"
print(msg.format(result))

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Linux

Ceci est un exemple de résultat qui dépendra du serveur.

Python - FTP
FTPou File Transfer Protocol est un protocole réseau bien connu utilisé pour transférer des
fichiers entre les ordinateurs d'un réseau. Il est créé sur une architecture client-serveur et peut
être utilisé avec l'authentification utilisateur. Il peut également être utilisé sans authentification
mais ce sera moins sécurisé. Connexion FTP qui maintient un répertoire de travail actuel et
d'autres indicateurs, et chaque transfert nécessite une connexion secondaire à travers laquelle
les données sont transférées. La plupart des navigateurs Web courants peuvent récupérer des
fichiers hébergés sur des serveurs FTP.

Les méthodes de la classe FTP


En python, nous utilisons le module ftplib qui a les méthodes requises ci-dessous pour lister les
fichiers lorsque nous transférerons les fichiers.

Méthode La description

pwd () Répertoire de travail actuel.

cwd () Remplacez le répertoire de travail actuel par chemin.

dir ([chemin [, ... [, cb]]) Affiche la liste du répertoire du chemin. Cb de rappel facultatif passé à retrlin

lignes de stockage (cmd, f) Télécharge le fichier texte en utilisant une cmd FTP donnée - par exemple, le

storbinary (cmd, f [, bs = 8192]) Similaire à storlines () mais est utilisé pour les fichiers binaires.
supprimer (chemin) Supprime le fichier distant situé au chemin.

mkd (répertoire) Crée un répertoire distant.

exception ftplib.error_temp Exception levée lorsqu'un code d'erreur indiquant une erreur temporaire (co
499) est reçu.

exception ftplib.error_perm Exception déclenchée lorsqu'un code d'erreur signifiant une erreur permane
500 et 599) est reçu.

connect (hôte [, port [, délai Se connecte à l'hôte et au port donnés. Le numéro de port par défaut est 21
d'attente]])

quitter() Ferme la connexion et se ferme.

Vous trouverez ci-dessous des exemples de certaines des méthodes ci-dessus.

Liste des fichiers


L'exemple ci-dessous utilise une connexion anonyme au serveur ftp et répertorie le contenu du
répertoire actuel. Il traite le nom des fichiers et des répertoires et les stocke sous forme de liste.
Puis les imprime.

import ftplib

ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")

data = []

ftp.dir(data.append)

ftp.quit()

for line in data:


print "-", line
Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

- lrwxrwxrwx 1 0 0 1 Nov 13 2012 ftp -> .


- lrwxrwxrwx 1 0 0 3 Nov 13 2012 mirror -> pub
- drwxr-xr-x 23 0 0 4096 Nov 27 2017 pub
- drwxr-sr-x 88 0 450 4096 May 04 19:30 site
- drwxr-xr-x 9 0 0 4096 Jan 23 2014 vol

Changer le répertoire
Le programme ci-dessous utilise la méthode cwd disponible dans le module ftplib pour changer
de répertoire puis récupérer le contenu requis.

import ftplib

ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")

data = []

ftp.cwd('/pub/') change directory to /pub/


ftp.dir(data.append)

ftp.quit()

for line in data:


print "-", line

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

- lrwxrwxrwx 1 504 450 14 Nov 02 2007 FreeBSD ->


os/BSD/FreeBSD
- lrwxrwxrwx 1 504 450 20 Nov 02 2007 ImageMagick ->
graphics/ImageMagick
- lrwxrwxrwx 1 504 450 13 Nov 02 2007 NetBSD ->
os/BSD/NetBSD
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 OpenBSD ->
os/BSD/OpenBSD
- -rw-rw-r-- 1 504 450 932 Jan 04 2015 README.nluug
- -rw-r--r-- 1 504 450 2023 May 03 2005
WhereToFindWhat.txt
- drwxr-sr-x 2 0 450 4096 Jan 26 2008 av
- drwxrwsr-x 2 0 450 4096 Aug 12 2004 comp

Récupération des fichiers


Après avoir obtenu la liste des fichiers comme indiqué ci-dessus, nous pouvons récupérer un
fichier spécifique en utilisant le getfileméthode. Cette méthode déplace une copie du fichier du
système distant vers le système local à partir duquel la connexion ftp a été initiée.

import ftplib
import sys

def getFile(ftp, filename):


try:
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
except:
print "Error"

ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")

ftp.cwd('/pub/') change directory to /pub/


getFile(ftp,'README.nluug')

ftp.quit()

Lorsque nous exécutons le programme ci-dessus, nous trouvons que le fichier README.nlug est
présent dans le système local à partir duquel la connexion a été initiée.

Python - SFTP
SFTP est également connu sous le nom de protocole de transfert de fichiers SSH. Il s'agit d'un
protocole réseau qui fournit l'accès aux fichiers, le transfert de fichiers et la gestion des fichiers
sur n'importe quel flux de données fiable. Le programme est exécuté sur un canal sécurisé, tel
que SSH, que le serveur a déjà authentifié le client et que l'identité de l'utilisateur client est
disponible pour le protocole.
le pysftpmodule est une interface simple vers SFTP. Le module propose des abstractions de
haut niveau et des routines basées sur les tâches pour gérer les besoins SFTP. Nous installons
donc le module dans notre environnement python avec la commande ci-dessous.

pip install pysftp


Exemple
Dans l'exemple ci-dessous, nous nous connectons à un serveur distant en utilisant sftp, puis
récupérons et mettons un fichier dans ce répertoire.

import pysftp
with pysftp.Connection('hostname', username='me', password='secret') as
sftp:
with sftp.cd('/allcode'): # temporarily chdir to allcode
sftp.put('/pycode/filename') # upload file to allcode/pycode on
remote
sftp.get('remote_file') # get a remote file

Lorsque nous exécutons le code ci-dessus, nous sommes en mesure de voir la liste des fichiers
présents dans le répertoire allcode et également de placer et d'obtenir un fichier dans ce
répertoire.

Python - Serveurs Web


Python est suffisamment polyvalent pour créer de nombreux types d'applications et de
programmes qui pilotent Internet ou d'autres réseaux informatiques. Un aspect important
d'Internet réside dans les serveurs Web qui sont à la racine du modèle client-serveur. Dans ce
chapitre, nous verrons quelques serveurs Web créés en langage python pur.

Gunicorn
Gunicorn est un serveur Web autonome doté d'un processus maître central chargé de gérer les
processus de travail lancés de différents types. Ces processus de travail traitent et traitent
ensuite les demandes directement. Et tout cela peut être configuré et adapté pour répondre aux
divers besoins des scénarios de production.

Caractéristiques importantes
 Il prend en charge WSGI et peut être utilisé avec n'importe quelle application et
framework Python WSGI exécutant
 Il peut également être utilisé en remplacement de Paster (ex: Pyramid), le serveur de
développement de Django, web2py, etc.
 Offre le choix de divers types / configurations de travailleurs et une gestion automatique
des processus de travail
 Prise en charge de HTTP / 1.0 et HTTP / 1.1 (Keep-Alive) via des nœuds de calcul
synchrones et asynchrones
 Livré avec le support SSL
 Extensible avec crochets

Serveur CherryPy WSGI


CherryPy est un framework Web autonome car il peut fonctionner seul sans avoir besoin de
logiciel supplémentaire. Il possède son propre serveur Web compatible WSGI, HTTP / 1.1.
Comme il s'agit d'un serveur WSGI, il peut également être utilisé pour servir n'importe quelle
autre application WSGI Python, sans être lié au cadre de développement d'applications de
CherryPy.
Caractéristiques importantes
 Il peut exécuter toutes les applications Web Python exécutées sur WSGI.
 Il peut gérer les fichiers statiques et il peut simplement être utilisé pour servir des fichiers
et des dossiers seuls.
 Il est en pool de threads.
 Il prend en charge SSL.
 C'est une alternative pure-Python facile à adapter, facile à utiliser, robuste et fiable.

Web tordu
Il s'agit d'un serveur Web fourni avec la bibliothèque réseau Twisted. Alors que Twisted lui-même
est "un moteur de mise en réseau événementiel", le serveur Web Twisted fonctionne sur WSGI et
est capable d'alimenter d'autres applications Web Python.

Caractéristiques importantes
 Il exécute les applications WSGI Python
 Il peut agir comme un framework de serveur Web Python, vous permettant de le
programmer avec le langage à des fins de service HTTP personnalisé
 Il offre une capacité de prototypage simple et rapide via des scripts Python (.rpy) qui sont
exécutés sur des requêtes HTTP
 Il est livré avec des capacités de proxy et de proxy inverse
 Il prend en charge les hôtes virtuels
 • Il peut même servir Perl, PHP et cetera

Python - Téléchargement de données


Nous pouvons télécharger des données sur un sereur en utilisant le module de python qui gère
ftp ou File Transfer Protocol.
Nous devons installer le module ftplib pour y parvenir.

pip install ftplib

Utilisation de ftplib
Dans l'exemple ci-dessous, nous utilisons la méthode FTP pour nous connecter au serveur, puis
nous fournissons les informations d'identification de l'utilisateur. Ensuite, nous mentionnons le
nom du fichier et la méthode storbinary pour envoyer et stocker le fichier sur le serveur.

import ftplib
ftp = ftplib.FTP("127.0.0.1")
ftp.login("username", "password")
file = open('index.html','rb')
ftp.storbinary("STOR " + file, open(file, "rb"))
file.close()
ftp.quit()

Lorsque nous exécutons le programme ci-dessus, nous observons qu'une copie du fichier a été
créée sur le serveur.
Utilisation de ftpreety
Semblable à ftplib, nous pouvons utiliser ftpreety pour se connecter en toute sécurité à un
serveur distant et télécharger un fichier. Nous pouvons également télécharger le fichier en
utilisant ftpreety. Le programme ci-dessous illustre la même chose.

from ftpretty import ftpretty


# Mention the host
host = "127.0.0.1"
# Supply the credentisals
f = ftpretty(host, user, pass )
# Get a file, save it locally
f.get('someremote/file/on/server.txt', '/tmp/localcopy/server.txt')
# Put a local file to a remote location
# non-existent subdirectories will be created automatically
f.put('/tmp/localcopy/data.txt', 'someremote/file/on/server.txt')

Lorsque nous exécutons le programme ci-dessus, nous observons qu'une copie du fichier a été
créée sur le serveur.

Python - Serveur proxy


Les serveurs proxy sont utilisés pour accéder à un site Web via un autre serveur afin que la
navigation reste anonyme. Il peut également être utilisé pour contourner le blocage d'adresses IP
spécifiques.
Nous utilisons la méthode urlopen du module urllib pour accéder au site Web en passant
l'adresse du serveur proxy en paramètre.

Exemple
Dans l'exemple ci-dessous, nous utilisons une adresse proxy pour accéder au site Web
twitter.con pour un accès anonyme. Le statut de réponse OK prouve l'accès réussi via un serveur
proxy.

import urllib
URL = 'https://www.twitter.com'
PROXY_ADDRESS = "265.24.11.6:8080"
if __name__ == '__main__':
resp = urllib.urlopen(URL, proxies = {"http" : PROXY_ADDRESS})
print "Proxy server returns response headers: %s " %resp.headers

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Proxy server returns response headers: cache-control: no-cache, no-store,


must-revalidate, pre-check=0, post-check=0
content-length: 145960
content-type: text/html;charset=utf-8
date: Mon, 02 Jul 2018 02:06:19 GMT
expires: Tue, 31 Mar 1981 05:00:00 GMT
last-modified: Mon, 02 Jul 2018 02:06:19 GMT
pragma: no-cache
server: tsa_n
set-cookie: fm=0; Expires=Mon, 02 Jul 2018 02:06:10 GMT; Path=/;
Domain=.twitter.com; Secure; HTTPOnly
set-cookie:
_twitter_sess=BAh7CSIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo
%250ASGFzaHsABjoKQHVzZWR7ADoPY3JlYXRlZF9hdGwrCAifvVhkAToMY3NyZl9p
%250AZCIlNzlhY2ZhMzdmNGFkYTU0ZTRmMDkxODRhNWNiYzI0MDI6B2lkIiUyZTgy
%250AOTAyYjY4NTBkMzE3YzNjYTQwNzZjZDhhYjZhMQ%253D%253D--
6807256d74a01129a7b0dcf383f56f169fb8a66c; Path=/; Domain=.twitter.com;
Secure; HTTPOnly
set-cookie: personalization_id="v1_iDacJdPWUx3e81f8UErWTA=="; Expires=Wed,
01 Jul 2020 02:06:19 GMT; Path=/; Domain=.twitter.com
set-cookie: guest_id=v1%3A153049717939764273; Expires=Wed, 01 Jul 2020
02:06:19 GMT; Path=/; Domain=.twitter.com
set-cookie: ct0=50c8b59b09322825cd750ea082e43bdc; Expires=Mon, 02 Jul 2018
08:06:19 GMT; Path=/; Domain=.twitter.com; Secure
status: 200 OK
strict-transport-security: max-age=631138519
x-connection-hash: 89dfbab81abc35dd8f618509c6171bd3
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-response-time: 312
x-transaction: 007b998000f86eaf
x-twitter-response-tags: BouncerCompliant
x-ua-compatible: IE=edge,chrome=1
x-xss-protection: 1; mode=block; report=https://twitter.com/i/xss_report

Python - Liste de répertoires


Python peut être utilisé pour obtenir la liste du contenu d'un répertoire. Nous pouvons créer un
programme pour lister le contenu du répertoire qui se trouve dans la même machine où python
s'exécute. Nous pouvons également nous connecter au système distant et répertorier le contenu
du répertoire distant.
Liste du répertoire local
Dans l'exemple ci-dessous, nous utilisons la méthode listdir () pour obtenir le contenu du
répertoire courant. Pour indiquer également le type de contenu comme un fichier ou un
répertoire, nous utilisons plus de fonctions pour évaluer la nature du contenu.

for name in os.listdir('.'):


if os.path.isfile(name): print 'file: ', name
elif os.path.isdir(name): print 'dir: ', name
elif os.path.islink(name): print 'link: ', name
else: print 'unknown', name

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

file: abcl.htm
dir: allbooks
link: ulink

Veuillez noter que le contenu ci-dessus est spécifique au système sur lequel le programme
python a été exécuté. Le résultat variera en fonction du système et de son contenu.

Liste du répertoire distant


Nous pouvons lister le contenu du répertoire distant en utilisant ftp pour accéder au système
distant. Une fois la connexion établie, nous pouvons utiliser des commandes qui listeront le
contenu du répertoire d'une manière similaire à la liste des répertoires locaux.

from ftplib import FTP


def main():
ftp = FTP('ftp.ibiblio.org')
ftp.login()
ftp.cwd('pub/academic/biology/') # change to some other subject
entries = ftp.nlst()
ftp.quit()
print(len(entries), "entries:")
for entry in sorted(entries):
print(entry)
if __name__ == '__main__':
main()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

(6, 'entries:')
INDEX
README
acedb
dna-mutations
ecology+evolution
molbio

Python - Appel de procédure distante


Le système d'appel de procédure à distance (RPC) vous permet d'appeler une fonction
disponible sur un serveur distant en utilisant la même syntaxe que celle utilisée lors de l'appel
d'une fonction dans une bibliothèque locale. Ceci est utile dans deux situations.
 Vous pouvez utiliser la puissance de traitement de plusieurs machines à l'aide de rpc
sans changer le code pour appeler les programmes situés dans les systèmes distants.
 Les données nécessaires au traitement ne sont disponibles que dans le système distant.
Ainsi, en python, nous pouvons traiter une machine comme un serveur et une autre machine
comme un client qui appellera le serveur pour exécuter la procédure distante. Dans notre
exemple, nous allons prendre l'hôte local et l'utiliser à la fois comme serveur et client.

Exécuter un serveur
Le langage python est livré avec un serveur intégré que nous pouvons exécuter en tant que
serveur local. Le script pour exécuter ce serveur se trouve sous le dossier bin de l'installation de
python et nommé classic.py. Nous pouvons l'exécuter dans l'invite python et vérifier son
exécution en tant que serveur local.

python bin/classic.py

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

INFO:SLAVE/18812:server started on [127.0.0.1]:18812

Exécuter un client
Ensuite, nous exécutons le client à l'aide du module rpyc pour exécuter un appel de procédure à
distance. Dans l'exemple ci-dessous, nous exécutons la fonction d'impression sur le serveur
distant.

import rpyc
conn = rpyc.classic.connect("localhost")
conn.execute("print('Hello from Tutorialspoint')")

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Hello from Tutorialspoint


Évaluation des expressions via RPC
En utilisant les exemples de code ci-dessus, nous pouvons utiliser les fonctions intégrées de
python pour l'exécution et l'évaluation d'expressions via rpc.

import rpyc
conn = rpyc.classic.connect("localhost")
conn.execute('import math')
conn.eval('2*math.pi')

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

6.283185307179586

Python - Serveur JSON RPC


La notation d'objets JSON ou JavaScript est un format d'échange de données léger. Il est facile
pour les humains de lire et d'écrire. Il est facile pour les machines d'analyser et de générer.
L'appel RPC basé sur JSON est capable d'envoyer des données de manière beaucoup plus
compacte et efficace que l'appel RPC basé sur XML normal. Le module pythonjsonrpclib est
capable de créer un serveur et un client JSON simples.

Exemple
Dans l'exemple ci-dessous, nous créons un serveur JSON simple et y créons une fonction. Cette
fonction divise une liste plus grande en listes plus petites mentionnant la longueur de l'argument
ainsi que l'argument lui-même.

# server program
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer
def findlen(*args):
res = []
for arg in args:
try:
lenval = len(arg)
except TypeError:
lenval = None
res.append((lenval, arg))
return res
def main():
server = SimpleJSONRPCServer(('localhost', 1006))
server.register_function(findlen)
print("Start server")
server.serve_forever()
if __name__ == '__main__':
main()
# Call by client
from jsonrpclib import Server
def main():
conn = Server('http://localhost:1006')
print(conn.findlen(('a','x','d','z'), 11, {'Mt. Abu': 1602, 'Mt.
Nanda': 3001,'Mt. Kirubu': 102, 'Mt.Nish': 5710}))
if __name__ == '__main__':
main()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

[[4, [u'a', u'x', u'd', u'z']], [None, 11], [4, {u'Mt. Abu': 1602, u'Mt.
Kirubu': 102, u'Mt. Nanda': 3001, u'Mt.Nish': 5710}]]

Python - Google Maps


Python fournit des modules qui peuvent être utilisés pour traduire les adresses disponibles dans
google map directement en coordonnées géographiques. Il est utile de trouver des adresses
professionnelles et de localiser la proximité des différentes adresses.
Nous utilisons un module nommé pygeocoderqui fournit les fonctionnalités pour recevoir des
adresses et des géocodes. Ce module est installé via pip à l'aide de la commande suivante.

Installation de pygeocoder
pip install pygeocoder

Recherche d'adresse professionnelle


Nous soumettons un nom d'entreprise en entrée et le programme donne l'adresse complète en
sortie. Le module utilise les données de google maps en arrière-plan pour récupérer le résultat.

from pygeocoder import Geocoder


business_name = "Workafella Business Centre - Hitec city"
print "Searching %s" %business_name
results = Geocoder.geocode(business_name)
for result in results:
print result

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -


Searching Workafella Business Centre - Hitec city
Western pearl building 1st floor, Hitech City Rd,
Opposite HDFC Bank, Kondapur, Hyderabad, Telangana 500084, India

Python - Flux RSS


RSS (Rich Site Summary) est un format permettant de diffuser du contenu Web en constante
évolution. De nombreux sites d'actualités, blogs et autres éditeurs en ligne syndiquent leur
contenu sous forme de flux RSS à quiconque le souhaite. En python, nous utilisons le package
ci-dessous pour lire et traiter ces flux.

pip install feedparser

Structure d'alimentation
Dans l'exemple ci-dessous, nous obtenons la structure du flux afin de pouvoir analyser plus en
détail les parties du flux que nous voulons traiter.

import feedparser
NewsFeed =
feedparser.parse("https://timesofindia.indiatimes.com/rssfeedstopstories.cm
s")
entry = NewsFeed.entries[1]
print entry.keys()

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

['summary_detail', 'published_parsed', 'links', 'title', 'summary',


'guidislink', 'title_detail', 'link', 'published', 'id']

Titre et publications du flux


Dans l'exemple ci-dessous, nous lisons le titre et la tête du flux rss.

import feedparser
NewsFeed =
feedparser.parse("https://timesofindia.indiatimes.com/rssfeedstopstories.cm
s")
print 'Number of RSS posts :', len(NewsFeed.entries)
entry = NewsFeed.entries[1]
print 'Post Title :',entry.title

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Number of RSS posts : 5


Post Title : Cong-JD(S) in SC over choice of pro tem speaker
Détails du flux
Sur la base de la structure d'entrée ci-dessus, nous pouvons dériver les détails nécessaires du
flux en utilisant le programme python comme indiqué ci-dessous. Comme l'entrée est un
dictionnaire, nous utilisons ses clés pour produire les valeurs nécessaires.

import feedparser
NewsFeed =
feedparser.parse("https://timesofindia.indiatimes.com/rssfeedstopstories.cm
s")
entry = NewsFeed.entries[1]
print entry.published
print "******"
print entry.summary
print "------News Link--------"
print entry.link

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

Fri, 18 May 2018 20:13:13 GMT


******
Controversy erupted on Friday over the appointment of BJP MLA K G Bopaiah
as pro tem speaker for the assembly, with Congress and JD(S) claiming the
move went against convention that the post should go to the most senior
member of the House. The combine approached the SC to challenge the
appointment. Hearing is scheduled for 10:30 am today.
------News Link--------
https://timesofindia.indiatimes.com/india/congress-jds-in-sc-over-bjp-mla-
made-pro-tem-speaker-hearing-at-1030-am/articleshow/64228740.cms

Vous aimerez peut-être aussi