[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird

Dinge die zu tun sind

Erstellen Sie einen einfachen lokalen HTTP-Server mit CGI in Python.

Ich habe versucht, ein CGI-Skript in Python anstelle von Perl zu schreiben, wenn es einfach war.

Umgebung

Was ist CGI?

  • CGI ist eine Abkürzung für Common Gateway Interface, eine Funktion zum Anzeigen des Ergebnisses der programmgesteuerten Verarbeitung auf einem Webserver. * *

(Zitiert aus Was ist CGI)

Kurz gesagt, ich denke, dass es eine Funktion ist, die einen Wert von einem Browser übernehmen, auf der Serverseite verarbeiten und erneut zurückgeben kann, um eine dynamische Webseite zu erstellen.

Vorbereiten eines lokalen HTTP-Servers

Zunächst müssen wir einen Server einrichten, damit wir lokal einen HTTP-Server einrichten und die Webseite anzeigen können.

Schreiben Sie Index.html in das Verzeichnis, mit dem Sie arbeiten möchten, um die Seite zu erstellen, die Sie anzeigen möchten. Diesmal sind die zu sendenden Daten Lebensmittel und Jahreszeit.

index.html


<html>
    <head>
        <title>Servertest</title>
        <meta http-equiv="content-type" charset="utf-8">
    </head>
    <body>
    <form action="/cgi-bin/cgi_test.py" method="POST">
        <div>
            <label for="name">Lieblingsessen</label>
            <input type="text" name="food" value="Apfel">
            <label for="season">Lieblingsjahreszeit</label>
            <input type="text" name="season" value="Winter">
            <button>Senden</button>
        </div>
    </form>
    </body>
</html>

Was Sie hier beachten müssen, ist der Weg der Aktion

"/cgi-bin/Name der CGI-Skriptdatei"

Ist zu sein. Dies ist der relative Pfad zur CGI-Skriptdatei. Sie erstellen später eine Skriptdatei unter Verwendung des hier angegebenen Skriptdateinamens.

Serverstarttest

Versuchen Sie einmal, den Server zu starten. Starten Sie es im Terminal.

$ python3 -m http.server 8080

Bei der Ausführung sieht es wie folgt aus. Ich habe vorerst 8080 verwendet, aber jede andere Nummer ist in Ordnung, solange sie verwendet werden kann.

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

Überprüfen Sie nun, ob es funktioniert. http://localhost:8080/ Wenn alles gut geht, sieht es so aus: Übrigens, auch wenn Sie die Senden-Taste drücken, sollte immer noch eine Fehlermeldung angezeigt werden. server_test.png

Schreiben eines CGI-Skripts

Schreiben wir nun das CGI-Skript in Python. Erstellen Sie im Arbeitsverzeichnis (dem Verzeichnis, in dem sich index.html befindet) ein Verzeichnis mit dem Namen cgi-bin und schreiben Sie das CGI-Skript hinein. Die Dateistruktur sieht so aus.

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

Verwenden Sie hier auch den in index.html angegebenen Namen für den Dateinamen.

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>")

Stellen Sie sicher, dass Sie hier #! / Usr / bin / env python in die erste Zeile schreiben. Wenn Sie dies nicht schreiben, wird der Fehler "Betriebssystemfehler: [Errno 8] Exec-Formatfehler:" angezeigt. Dies gibt einen Dolmetscher an. Weitere Informationen finden Sie in den folgenden Artikeln. #! / Bin / sh ist nicht nur ein Kommentar! Shebang! (Qiita)

Lassen Sie uns das CGI-Skript ausführen

Machen wir das. Starten Sie den Server wie zuvor im Terminal. Fügen Sie nun die Option --cgi hinzu, um CGI auszuführen.

python3 -m http.server 8080 --cgi

Nachdem Sie den Start unter http: // localhost: 8080 / bestätigt haben, drücken Sie diesmal zur Bestätigung auf Senden. cgi_test.png Wenn es angezeigt werden kann, ist es erfolgreich.

Wenn Sie eine Fehlermeldung erhalten

Wenn es beim Drücken der Senden-Taste nicht angezeigt wird, überprüfen Sie zuerst das Terminal, um festzustellen, welche Art von Fehler auftritt.

· Die Erlaubnis ist nicht 755 (nicht erlaubt)

code 403, message CGI script is not executable

→ Geben Sie chmod 755 CGI script name.py in das Terminal im Verzeichnis cgi-bin ein.

-Character Code ist nicht gesetzt

SyntaxError: Non-ASCII character '\xe5'

→ Fügen Sie oben in der Datei # encoding: utf-8 hinzu.

Referenz

Erstellen Sie einen komfortablen Webserver mit Python und testen Sie CGI. (Qiita)

Recommended Posts

[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
Ich möchte ein Spiel mit Python machen
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte mit Python in eine Datei schreiben
Ich möchte mit einem Roboter in Python arbeiten.
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Ich möchte Lambda mit Python auf Mac AWS!
Ich möchte einen Quantencomputer mit Python betreiben
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
So geben Sie das öffentliche Verzeichnis Python Simple HTTP Server an
Ich möchte ein Klickmakro mit pyautogui (Wunsch) erstellen.
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
Ich möchte mit Python debuggen
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
So starten Sie einen einfachen WEB-Server, der CGI von PHP und Python ausführen kann
[1 Stunde Herausforderung] Ich habe versucht, eine Wahrsagerseite zu erstellen, die für Python zu geeignet ist
Ich möchte eine GUI-Entwicklungsumgebung mit Python oder Golang auf dem Mac einrichten
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
Ich möchte einen Sprachwechsler mit Python und SPTK in Bezug auf eine berühmte Site erstellen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich möchte eine Python-Umgebung erstellen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Ich habe mit Python einen einfachen Blackjack gemacht
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Ich habe versucht, mit einem Remote-Server über Socket-Kommunikation mit Python zu kommunizieren.
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich möchte eine Webanwendung mit React und Python Flask erstellen
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich möchte MATLAB feval mit Python verwenden
Ich möchte mit Python ein Fenster erstellen
Starten Sie mit Docker einen einfachen Python-Webserver
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
#Unresolved Ich möchte Gobject-Introspection mit Python3 kompilieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Ich möchte C ++ - Code aus Python-Code erstellen!
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich möchte eine schöne Python-Entwicklungsumgebung für meinen neuen Mac erstellen
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
[Python] Ich habe versucht, eine Shiritori-KI zu erstellen, die den Wortschatz durch Schlachten verbessert
Wenn Sie einen Discord-Bot mit Python erstellen möchten, verwenden wir ein Framework