Wie kann ich implementieren einen einfachen web-server mit Python ohne Bibliotheken?
Muss ich implementieren, die eine sehr einfache web-server-like app in Python würde eine grundlegende HTTP-Anfragen und Antworten und display-sehr einfache Ausgabe auf der web-Seite. Ich bin nicht allzu besorgt, dass Sie tatsächlich mit der Programmierung in Python, aber ich bin nicht sicher, wo Sie anfangen sollen? Wie diese eingerichtet? Eine Datei? Mehrere Dateien? Ich denke, ich habe keine Ahnung, wie der Ansatz der Tatsache, dass dies ein "server" - also ich bin nicht vertraut mit, wie Sie Ansatz den Umgang mit HTTP-Anfragen/- buchsen/Bearbeitung von Anfragen, etc. Irgendwelche Ratschläge? Ressourcen?
Weiter erläutern Sie Ihre Anforderungen (und warum). Sind Sie wollen zu implementieren, die vollständige application-level-stack, oder Sie verwenden können, z.B. Apache? Mehr erklären, was Sie brauchen, Und warum. Schließlich, wenn Sie das "websocket" - tag, meinst du es oder war das nur ein falscher tag?
Ohne Verwendung von beliebiger Bibliotheken? Sicherlich
check Dokumentation Seite, hier ich gehe davon aus, dass "alle Bibliotheken" Bibliotheken, die nicht enthalten sind in der python-installation.
Ich denke, es ist fair zu übernehmen, "alle Bibliotheken" im Sinne von "alle nicht-standard-Bibliotheken".
Ohne Verwendung von beliebiger Bibliotheken? Sicherlich
socket
wird erforderlich sein mindestens?check Dokumentation Seite, hier ich gehe davon aus, dass "alle Bibliotheken" Bibliotheken, die nicht enthalten sind in der python-installation.
Ich denke, es ist fair zu übernehmen, "alle Bibliotheken" im Sinne von "alle nicht-standard-Bibliotheken".
InformationsquelleAutor antonpug | 2012-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie socket Programmierung für diesen Zweck. Der folgende Codeausschnitt erstellt ein tcp-socket und lauscht auf port 9000 für http-requests:
Starten Sie den server,
$ python server.py
.Öffnen
http://localhost:9000/
in Ihrem web-browser (fungiert als client). Dann im browser-Fenster, sehen Sie den text "Hello World" (http-response).EDIT**
Der Vorherige code war nur getestet auf chrome, und Euch vorgeschlagen, über anderen Browser, der code wurde geändert:
shutdown()
muss aufgerufen werden, socket.shutdown-vs-Buchse.in der NäheDann der code wurde getestet auf chrome, firefox (http://localhost:9000/) und einfache curl im terminal (curl http://localhost:9000).
Es hat nicht wirklich sprechen HTTP, so dass fast jeder browser würde nicht mit diesem arbeiten. Es funktioniert nicht in Chrome. Es funktioniert nur in Firefox, wenn Sie die Stop-Taste drücken. Dies ist nicht ein web-server.
Ich kopierte Ihr Skript lief es und ich bekomme eine Fehlermeldung mit dem Inhalt
a byte-like object is required not 'str'
wie kann ich dieses Problem beheben?Modifiziert den code ein wenig. Auch es wurde getestet auf python 2.7.6. Wenn Sie mit python 3, in denen Zeichenketten im Unicode-Format vor; aber bei der übertragung über das Netzwerk, wir müssen zum senden von bytes, strings statt. So versuchen sendall() anstatt send() mit string-Ausgabe als utf-8 kodiert. #START output = "Es funktioniert" clientsocket.sendall(Ausgabe.encode("utf-8")) #ENDE
Super! Das ist genau das, was ich brauchte. Ich benutze Python 3 also die ` sendall()` und
.encode("utf-8")
sind absolut notwendig und beide haben den Fehler behoben, ich war immer. alle meine server versucht, bis zu diesem Punkt versagt haben, so bin ich sehr dankbar. Dies ist eine wohlverdiente up-vote aber ich weiß nicht, wie dieclientsocket.send("HTTP/1.1 200 OK\n" +"Content-Type: text/html\n" +"\n" # Important! +"<html><body>Hello World</body></html>\n")
sollte nicht sein, dass alle auf der gleichen Linie? Ich hatte zu ändern, dass ein Teil. Nochmals vielen Dank. : )InformationsquelleAutor pritam
Sollten Sie sich die SimpleHttpServer (py3: http.server) - Modul.
Je nachdem, was Sie versuchen zu tun, Sie können entweder einfach, oder schauen Sie sich das Modul Quelle (py2, py3) für Ideen.
Wenn Sie möchten, um mehr low-level, SimpleHttpServer erstreckt BaseHttpServer (Quelle) zu machen, nur die Arbeit.
Wenn Sie wollen bekommen Sie sogar mehr low-level, werfen Sie einen Blick auf SocketServer (Quelle: py2, py3).
Menschen werden oft führen Sie python wie
python -m SimpleHttpServer
(oderpython3 -m http.server
), wenn Sie wollen einfach nur ein Verzeichnis freigeben: es ist eine voll funktionsfähige und... einfach server.InformationsquelleAutor quodlibetor
Habe ich beschlossen, diese Arbeit in Python 3 und machen es Arbeit für Chrome zu verwenden, als ein Beispiel für ein online-Kurs, den ich entwickelt. Python 3 natürlich braucht
encode()
unddecode()
an den richtigen stellen. Chrom - wirklich senden will seine BEKOMMEN verlangen, bevor es die Daten bekommt. Ich habe auch einige Fehler zu überprüfen, so bereinigt er seine Steckdose, wenn Sie Abbrechen dem server oder es explodiert:Den server auch druckt die ankommenden HTTP-request. Der code ist natürlich nur sendet text/html unabhängig von der Anfrage - auch wenn der browser fragt nach dem favicon:
Aber es ist ein ziemlich gutes Beispiel, die meist zeigt, warum Sie möchten, um die Verwendung eines Frameworks wie Flask oder DJango statt zu schreiben Ihre eigenen. Vielen Dank für den ersten code.
InformationsquelleAutor drchuck
Gibt es eine sehr einfache Lösung oben erwähnt, aber die Lösung oben funktioniert nicht. Diese Lösung wird getestet auf chrome und es funktioniert. Dies ist die python-3, obwohl es kann funktionieren, auf python 2 da ich noch nie getestet.
Ist dies verbesserte sich von die Antwort wurde angenommen, aber ich werde dies posten, damit zukünftige Benutzer können es leicht verwenden.
InformationsquelleAutor PythonPro