[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python

Choses à faire

Créez un serveur HTTP local simple avec CGI en Python.

J'ai essayé d'écrire un script CGI en Python au lieu de Perl si c'était simple.

environnement

Qu'est-ce que CGI

  • CGI est une abréviation de Common Gateway Interface, qui est une fonction permettant d'afficher le résultat du traitement par programme sur un serveur Web. *

(Cité de Qu'est-ce que CGI)

En bref, je pense que c'est une fonction qui peut prendre une valeur d'un navigateur, la traiter côté serveur, et la renvoyer à nouveau pour créer une page Web dynamique.

Préparation d'un serveur HTTP local

Tout d'abord, nous devons configurer un serveur, nous allons donc configurer un serveur HTTP localement et afficher la page Web.

Écrivez Index.html dans le répertoire avec lequel vous souhaitez travailler pour créer la page que vous souhaitez afficher. Cette fois, les données à envoyer sont la nourriture et la saison.

index.html


<html>
    <head>
        <title>Test du serveur</title>
        <meta http-equiv="content-type" charset="utf-8">
    </head>
    <body>
    <form action="/cgi-bin/cgi_test.py" method="POST">
        <div>
            <label for="name">Nourriture favorite</label>
            <input type="text" name="food" value="pomme">
            <label for="season">Saison préférée</label>
            <input type="text" name="season" value="hiver">
            <button>Envoyer</button>
        </div>
    </form>
    </body>
</html>

Ce à quoi vous devez faire attention ici, c'est le chemin de l'action

"/cgi-bin/Nom du fichier de script CGI"

Est d'être. Il s'agit du chemin d'accès relatif au fichier de script CGI, et vous créerez un fichier de script ultérieurement en utilisant le nom de fichier de script spécifié ici.

Test de démarrage du serveur

Essayez de démarrer le serveur une fois. Démarrez-le dans le terminal.

$ python3 -m http.server 8080

Une fois exécuté, il ressemblera à celui ci-dessous. J'ai utilisé 8080 pour le moment, mais n'importe quel autre numéro convient tant qu'il peut être utilisé.

Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

Maintenant, vérifiez si cela fonctionne. http://localhost:8080/ Si tout se passe bien, cela ressemblera à ceci: À propos, même si vous appuyez sur le bouton d'envoi, vous devriez toujours obtenir une erreur. server_test.png

Ecrire un script CGI

Maintenant, écrivons le script CGI en Python. Créez un répertoire nommé cgi-bin dans le répertoire de travail (le répertoire où se trouve index.html) et écrivez-y le script CGI. La structure du fichier ressemble à ceci.

.
├── cgi-bin
│   └── cgi_test.py
└── index.html

Utilisez également le nom spécifié dans index.html pour le nom de fichier ici.

cgi_test.py


#!/usr/bin/env python

import cgi
import cgitb
cgitb.enable()

print("Content-Type: text/html; charset=utf-8\n\n")

print("<html><body>")
form = cgi.FieldStorage()

for key in form:
    value = form[key].value
    print('<p>%s: %s</p>' % (key, value))

print("</body></html>")

Assurez-vous d'écrire #! / Usr / bin / env python sur la première ligne ici. Si vous n'écrivez pas ceci, vous obtiendrez l'erreur «Erreur OS: [Errno 8] Erreur de format Exec:« ». Cela spécifie un interpréteur, mais veuillez vous référer aux articles suivants pour plus de détails. #! / Bin / sh n'est pas qu'un commentaire! Case! (Qiita)

Lançons le script CGI

Faisons le. Démarrez le serveur dans le terminal comme précédemment. Ajoutez maintenant l'option --cgi pour exécuter CGI.

python3 -m http.server 8080 --cgi

Après avoir confirmé le démarrage sur http: // localhost: 8080 /, appuyez sur Envoyer cette fois pour confirmer. cgi_test.png S'il peut être affiché, il réussit.

Si vous obtenez une erreur

Si vous ne le voyez pas lorsque vous appuyez sur le bouton de soumission, vérifiez d'abord le terminal pour voir quel type d'erreur se produit.

· L'autorisation n'est pas 755 (non autorisée)

code 403, message CGI script is not executable

→ Entrez chmod 755 CGI script name.py dans le terminal du répertoire cgi-bin.

-Le code de caractère n'est pas défini

SyntaxError: Non-ASCII character '\xe5'

→ Ajoutez # coding: utf-8 en haut du fichier.

référence

Créez un serveur Web confortable avec python et testez CGI. (Qiita)

Recommended Posts

[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Je veux faire un jeu avec Python
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Je veux écrire dans un fichier avec Python
Je veux travailler avec un robot en python.
[Python] Je veux faire d'une liste imbriquée un taple
Je veux AWS Lambda avec Python sur Mac!
Je veux faire fonctionner un ordinateur quantique avec Python
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
Je veux créer un éditeur de blog avec l'administrateur de django
Comment spécifier un serveur HTTP simple Python de répertoire public
Je veux faire une macro de clic avec pyautogui (désir)
Je veux faire une macro de clic avec pyautogui (Outlook)
Je veux déboguer avec Python
Je veux ajouter un joli complément à input () en python
Comment démarrer un serveur WEB simple qui peut exécuter des cgi de php et python
[1 hour challenge] J'ai essayé de créer un site de bonne aventure qui soit trop adapté à Python
Je souhaite configurer un environnement de développement GUI avec Python ou Golang sur Mac
J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
Je souhaite rechercher le texte intégral avec elasticsearch + python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
Je veux créer un environnement Python
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
J'ai fait un simple blackjack avec Python
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Je souhaite créer une application Web en utilisant React et Python flask
Je veux faire de matplotlib un thème sombre
Je veux utiliser MATLAB feval avec python
Je veux créer une fenêtre avec Python
Démarrez un serveur Web Python simple avec Docker
Essayez de créer un code de "décryptage" en Python
Je souhaite utiliser le répertoire temporaire avec Python2
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
Essayez de créer un groupe de dièdre avec Python
Je veux créer du code C ++ à partir de code Python!
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
Je veux créer un bel environnement de développement Python pour mon nouveau Mac
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
[Python] J'ai essayé de créer une IA Shiritori qui améliore le vocabulaire grâce aux batailles
Si vous voulez créer un bot discord avec python, utilisons un framework