Configurer un serveur Internet en Python à l'aide de Socket

click fraud protection

En complément du didacticiel sur le client réseau, ce didacticiel montre comment implémenter un serveur Web simple dans Python. Pour être sûr, cela ne remplace pas Apache ou Zope. Il existe également des moyens plus robustes pour implémenter des services Web en Python, en utilisant des modules comme BaseHTTPServer. Ce serveur utilise exclusivement le module socket.

Vous vous souviendrez que le module socket est l'épine dorsale de la plupart des modules de service Web Python. Comme avec le client réseau simple, la création d'un serveur avec lui illustre les bases des services Web en Python de manière transparente. BaseHTTPServer lui-même importe le module socket pour affecter un serveur.

À titre de révision, toutes les transactions réseau se produisent entre les clients et les serveurs. Dans la plupart des protocoles, les clients demandent une certaine adresse et reçoivent des données.

Au sein de chaque adresse, une multitude de serveurs peuvent fonctionner. La limite est dans le matériel. Avec un matériel suffisant (RAM, vitesse du processeur, etc.), le même ordinateur peut servir de serveur Web, de serveur ftp et

instagram viewer
serveur de courrier (pop, smtp, imap ou tout ce qui précède) tous en même temps. Chaque service est associé à un port. Le port est lié à une socket. Le serveur écoute son port associé et donne des informations lorsque des demandes sont reçues sur ce port.

Pour affecter une connexion réseau, vous devez donc connaître l'hôte, le port et les actions autorisées sur ce port. La plupart des serveurs Web fonctionnent sur le port 80. Cependant, afin d'éviter tout conflit avec un serveur Apache installé, notre serveur Web fonctionnera sur le port 8080. Afin d'éviter tout conflit avec d'autres services, il est préférable de conserver les services HTTP sur le port 80 ou 8080. Ce sont les deux plus courants. Évidemment, si ceux-ci sont utilisés, vous devez trouver un port ouvert et alerter les utilisateurs sur le changement.

Comme avec le client réseau, vous devez noter que ces adresses sont les numéros de port communs pour les différents services. Tant que le client demande le service correct sur le bon port à la bonne adresse, la communication se fera toujours. Google Le service de messagerie, par exemple, ne s'exécutait pas initialement sur les numéros de port communs mais, comme ils savent comment accéder à leurs comptes, les utilisateurs peuvent toujours recevoir leur courrier.

Contrairement au client réseau, toutes les variables du serveur sont câblées. Tout service devant s'exécuter en permanence ne doit pas avoir les variables de sa logique interne définies sur la ligne de commande. La seule variation à ce sujet serait si, pour une raison quelconque, vous vouliez que le service s'exécute occasionnellement et sur différents numéros de port. Si tel était le cas, cependant, vous seriez toujours en mesure de surveiller l'heure système et de modifier les liaisons en conséquence.

Comme déjà mentionné, le serveur doit connaître l'hôte auquel il doit être associé et le port sur lequel écouter. Pour nos besoins, le service s'appliquera à tout nom d'hôte.

Le port, comme mentionné précédemment, sera le 8080. Notez donc que si vous utilisez ce serveur avec le client réseau, vous devrez modifier le numéro de port utilisé dans ce programme.

Que ce soit pour demander des informations ou pour les servir, afin d'accéder l'Internet, nous devons créer un socket. La syntaxe de cet appel est la suivante:

Les deux premiers sont évidemment des protocoles Internet. Tout ce qui voyage sur Internet est accessible dans ces familles. De nombreux réseaux ne fonctionnent toujours pas sur IPv6. Donc, sauf si vous le savez autrement, il est plus sûr de passer par défaut à IPv4 et d'utiliser AF_INET.

De loin, les types les plus courants sont SOCK_STEAM et SOCK_DGRAM car ils fonctionnent sur les deux protocoles de la suite IP (TCP et UDP). Les trois derniers sont beaucoup plus rares et ne sont donc pas toujours pris en charge.

Après avoir créé le socket, nous devons ensuite définir les options du socket. Pour tout objet socket, vous pouvez définir les options de socket à l'aide de la méthode setsockopt (). La syntaxe est la suivante:

Si nous voulons donner des commentaires à la personne qui appelle le serveur, nous pouvons maintenant entrer une commande d'impression pour confirmer que le serveur est opérationnel.

Après avoir configuré le serveur, nous devons maintenant dire Python que faire lorsqu'une demande est faite sur le port donné. Pour cela, nous référençons la requête par sa valeur et l'utilisons comme argument d'une boucle while persistante.

Lorsqu'une demande est faite, le serveur doit accepter la demande et créer un objet fichier pour interagir avec elle.

Dans ce cas, le serveur utilise le même port pour la lecture et l'écriture. Par conséquent, la méthode makefile reçoit un argument «rw». La longueur nulle de la taille du tampon laisse simplement cette partie du fichier à déterminer dynamiquement.

Sauf si nous voulons créer un serveur à action unique, l'étape suivante consiste à lire l'entrée de l'objet fichier. Lorsque nous faisons cela, nous devons être prudents de supprimer cette entrée d'espace blanc en excès.

La demande se présentera sous la forme d'une action, suivie d'une page, du protocole et de la version du protocole utilisé. Si l'on veut servir une page Web, on divise cette entrée pour récupérer la page demandée puis lit cette page dans une variable qui est ensuite écrite dans l'objet fichier socket. Une fonction pour lire un fichier dans un dictionnaire peut être trouvée dans le blog.

Afin de rendre ce tutoriel un peu plus illustratif de ce que l'on peut faire avec le module socket, nous allons renoncer à cette partie du serveur et montrer à la place comment on peut nuancer la présentation des données. Entrez les lignes suivantes dans le programme.

Si l'on envoie une page Web, la première ligne est un bon moyen d'introduire les données dans un navigateur Web. S'il est omis, la plupart des navigateurs Web utiliseront par défaut le rendu HTML. Cependant, si l'on l'inclut, le «OK» doit être suivi de deux nouveaux caractères de ligne. Ils sont utilisés pour distinguer les informations de protocole du contenu de la page.

La syntaxe de la première ligne, comme vous pouvez probablement le supposer, est le protocole, la version du protocole, le numéro de message et l'état. Si vous êtes déjà allé sur une page Web qui a été déplacée, vous avez probablement reçu une erreur 404. Le message 200 ici est simplement le message affirmatif.

Le reste de la sortie est simplement une page Web divisée en plusieurs lignes. Vous remarquerez que le serveur peut être programmé pour utiliser les données utilisateur dans la sortie. La dernière ligne reflète la demande Web telle qu'elle a été reçue par le serveur.

Enfin, comme les actes de fermeture de la requête, nous devons fermer l'objet fichier et le socket serveur.

Maintenant, enregistrez ce programme sous un nom reconnaissable. Après l'avoir appelé avec 'python nom_programme.py', si vous avez programmé un message pour confirmer que le service est en cours d'exécution, cela devrait s'imprimer à l'écran. Le terminal semblera alors s'arrêter. Tout est comme il se doit. Ouvrez votre navigateur Web et accédez à localhost: 8080. Vous devriez alors voir la sortie des commandes d'écriture que nous avons données. Veuillez noter que, pour des raisons d'espace, je n'ai pas implémenté la gestion des erreurs dans ce programme. Cependant, tout programme lancé dans la nature devrait l'être.

instagram story viewer