Réseaux et gestion des couches basses
Introduction
Les fonctionnalités de Qt, et par conséquent de PyQt, concernent absolument tous les aspects du développement de logiciels, y compris les couches basses et de manière plus générale, tout ce qui concerne les réseaux.
Voici à suivre quelques définitions nécessaires pour la suite.
-
Le modèle OSI (Open Systems Interconnection) est le modèle standard de communication entre ordinateurs. Il est défini selon sept couches : trois couches matérielles (1 à 3) et quatre couches applicatives (4 à 7).
-
Le fonctionnement par socket correspond à l’utilisation des protocoles TCP ou UDP pour établir des communications. Ceci correspond à la couche 4 du modèle OSI, c’est-à-dire à la première couche dite applicative.
-
Une API est un service web mettant à disposition des fonctionnalités accessibles par le protocole HTTP. C’est notamment le cas pour les API de type REST.
-
HTTP (Hypertext Transfer Protocol) est le protocole de communication client-serveur développé pour le Web.
Il est possible en PyQt de développer un mode de communication dit « par socket » aussi bien en UDP qu’en TCP. Nous étudierons ces deux protocoles dans leur utilisation avec PyQt, en rappelant les définitions nécessaires. Par ailleurs, nous étudierons...
PyQt et les sockets
1. Introduction
Si l’on désire faire transiter des données sur le réseau, le moyen le plus simple est d’implémenter le protocole TCP/IP et donc d’utiliser les sockets. Précisons, comme évoqué précédemment, que TCP correspond à la couche 4 du modèle OSI (c’est une couche applicative) tandis qu’IP correspond à la couche 3 du modèle OSI (celle-ci est une couche matérielle).
Une socket correspond à une sorte de point d’entrée du réseau, ou plus exactement à un point de connectivité. Cela implique qu’on associe les paramètres suivants à une socket :
-
Il faut en premier lieu une adresse hôte qui sera ici une adresse IP (relative donc à la couche 3 du modèle OSI).
-
Il faut également un port réseau. Basiquement, un port réseau est un nombre entre 0 et 65535. Il est habituel que certains ports soient réservés pour des usages particuliers (le protocole SSH, par exemple, utilise classiquement le port 22).
-
Enfin, il faut un protocole de transmission, correspondant à la couche 4 du modèle OSI. Concrètement, ce protocole sera soit TCP, soit UDP.
Après une présentation de l’adressage IP, nous allons voir de plus près en quoi consistent ces deux protocoles TCP et UDP, et quelles sont leurs différences fondamentales.
2. Adressage IP
L’adressage IP permet le routage et donc l’acheminement de paquets de données sur le réseau Internet. Une adresse IP correspond, ou peut correspondre, à une adresse physique d’un périphérique, supposée unique au monde, que l’on nomme adresse MAC (Media Access Control).
Une adresse IP est codée sur quatre octets (32 bits) ou sur six octets (128 bits). Cette différence distingue l’IPv4 de l’IPv6. Si l’on prend l’exemple de l’IPv4, on a (en notation décimale) une adresse IP qui est représentée par quatre nombres compris entre 0 et 255, séparés chacun par un point, comme par exemple :
127.255.0.128
Il est possible de connaître l’adresse IP de votre machine en tapant la commande suivante en ligne de commande (sous système Microsoft Windows) :
> ipconfig...
PyQt et les requêtes HTTP
1. Introduction
Nous avons précédemment évoqué le modèle OSI. Si nous devions situer le protocole HTTP au sein de ce modèle, nous le placerions dans la septième couche, la « couche application ».
On entend par HTTP (acronyme de Hypertext Transfer Protocol) le protocole de communication client-serveur utilisé par le Web.
HTTPS correspond à la variante sécurisée de HTTP.
Lorsque l’on utilise HTTP, la couche de transport (couche 4 du modèle OSI) utilise en général le protocole TCP évoqué dans la section précédente. En termes de ports, HTTP utilise le port 80 alors que HTTPS utilise usuellement le port 443.
L’exemple immédiat et évidemment très utilisé d’un client HTTP est le navigateur web que vous utilisez probablement chaque jour (Chrome, Firefox, Safari...).
Le protocole HTTP autorise le client HTTP à effectuer différentes actions en direction du serveur HTTP. Ces actions, appelées des méthodes, sont multiples. Les plus utilisées sont :
-
GET : permet d’obtenir une ressource issue du serveur HTTP.
-
HEAD : permet d’obtenir des informations au sujet d’une ressource, sans toutefois obtenir la ressource elle-même.
-
POST : permet d’envoyer vers le serveur HTTP des informations modifiant ou enrichissant une ressource.
-
DELETE : permet de supprimer une ressource.
Nous aurons besoin principalement de deux classes PyQt pour cette partie : QNetworkAccessManager et QNetworkRequest.
Les documentations en ligne de ces classes se trouvent respectivement aux deux adresses suivantes :
https://doc.qt.io/qt-5/qnetworkaccessmanager.html
https://doc.qt.io/qt-5/qnetworkrequest.html
Voyons à présent quelques exemples de requêtes et d’utilisation.
2. Exemples sur la thématique PyQt et HTTP
a. Récupérer le contenu d’une page web
La récupération du code HTML relatif à une adresse donnée, petit cas d’école, va nous permettre d’utiliser les deux classes précitées QNetworkAccessManager et QNetworkRequest.
On commence par déclarer nos imports. On utilisera en particulier le type PyQt QUrl qui permet d’encapsuler une URL.
from PyQt5.QtCore...