Seite 1 von 1

Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 16:52
von JoniP10
Hallo Leute,

ich muss erst mal sagen dass ich ein Anfänger bin, und noch fast gar keine Anhnung von Python habe.
Ich habe mir erstmal vorgenommen einen simplen Webserver zu erstellen. Das habe ich auch geschafft:

Code: Alles auswählen

print("#############")
print("#RobboServer#")
print("#############")
print("")
import http.server as h
h.test(HandlerClass=h.SimpleHTTPRequestHandler)
Es klappt auch alles ganz gut, aber wie kann ich jetzt den Port und das Root-Verzeichnis verändern?
Ich hoffe das ich euch nicht nerver mit meinen komischen Anfängerfragen! :D
Aber wenn sie trotzdem einer findet, der mir helfen will, dann wäre ich sehr dankbar.
JoniP10.

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 17:11
von /me
JoniP10 hat geschrieben:Es klappt auch alles ganz gut, aber wie kann ich jetzt den Port und das Root-Verzeichnis verändern?
Ich verwende kein Python 3, aber die Dokumentation von http.server kann ich dir trotzdem gerne heraussuchen.

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 17:26
von JoniP10
Ok erstmal danke für die schnelle Antwort.
Dort wird folgendes beschrieben:

Code: Alles auswählen

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

httpd = socketserver.TCPServer(("", PORT), Handler)

print("serving at port", PORT)
httpd.serve_forever()
Aber ich werde nicht schlau, wie ich das Root-Verzeichnis verändern soll. :?:
Vielleicht könnte mir ja nochmal einer helfen.
JoniP10

EDIT:

So sieht mein Code jetzt aus:

Code: Alles auswählen

print("#############   ")
print("#RobboServer#  by coder99! ")
print("#############   ")
print("")
import http.server
import socketserver

PORT = 8010

Handler = http.server.SimpleHTTPRequestHandler

httpd = socketserver.TCPServer(("", PORT), Handler)

print("serving at port", PORT)
httpd.serve_forever()

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 17:31
von deets
Das liegt daran, das es kein Root gibt. Das ein http Server statische Files ausliefert ist nicht standart. Apache, nginx und Co tun das - aber mit http & damit dem Server hier hat das nix zu tun.

Wenn die solche Grundlagen (die ja nix mit Python zu tun haben) fehlen - wäre es da nicht besser du benutzt mal ein webframework, wie bottle, Flask oder django?

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 17:58
von JoniP10
Ok, ich habe mich falsch ausgedrückt.
Ich möchte einfach nur, dass die dateien, die der Server anderen zur verfügung stellt,
nicht in dem Ordner wo das Serverprogramm drin ist, liegen , sondern in einem Unterordner.
JoniP10.

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 18:19
von deets
Ich habe dich schon verstanden. Du hast da eine falsche Vorstellung - HTTP hat erstmal nichts mit Dateien zu tun. Natuerlich ist es trivial, den self.path deines RequestHandlers in der do_GET-Methode auf ein Verzeichnis abzubilden, den mimetype rauszufummeln, und das Ganze dann auszuliefern.

Aber das musst du programmieren, es gibt kein root-Verzeichnis.

Nochmal: warum setzt du dich nicht mit bottle auseinander? Das hat zB eine Moeglichkeit, ein verzeichnis statisch auszuliefern.

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 18:23
von JoniP10
Ok dann werde ich deine Tipps befolgen.
Danke dafür. Aber wäre es nicht eine Möglichkeit eine "index.html" im Programmverzeichnis zu erstellen, und die dann auf das Verzeichnis "WebRoot" weiterleitet? Na ja, danke für die Tipps.
JoniP10.

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 18:29
von deets
Zum wiederholten male: es gibt kein WebRoot, also kann man auch nicht darauf umleiten.

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 18:36
von JoniP10
Sry das ich nerver aber ich habe einfach einen Ordner so genannt^^.
Und Bottle habe ich mir angeschaut und ich denke das ist was ich brauch.
JoniP10.

EDIT:

Ich habe meinen Server nochmal hochgeladen, dann kannst du dir vielleicht mal anschauen,
was ich meine.
http://coder99.bplaced.de/files/RobboServer.zip

Re: Python Sever erstellen [Anfänger]

Verfasst: Dienstag 21. Februar 2012, 20:27
von lunar
@JoniP10: Schon klar, doch was deets Dir zu sagen versucht, ist, dass das Konzept von "Ordner" und "Dateien" in HTTP gar nicht existiert. Der in Python eingebaute HTTP-Server kann so ohne weiteres keine Dateien aufliefern oder Verzeichnisse auflisten. Dir fehlen offensichtlich essentielle Grundlagen der Funktionsweise von HTTP, bevor Du also fortfährst mit dem Programmieren, wäre es ratsam, erst einmal die Wikipedia-Artikel zu HTTP zu lesen, damit Du überhaupt verstehst, womit Du da arbeitest.

Re: Python Sever erstellen [Anfänger]

Verfasst: Donnerstag 23. Februar 2012, 15:45
von JoniP10
Ok das stimmt. Trotzdem danke für eure Hilfe! Könntet ihr mir vielleicht noch ein paar gute Tutorials oder Bücher über das Thema empfehlen?
Bb, JoniP10.

Re: Python Sever erstellen [Anfänger]

Verfasst: Donnerstag 23. Februar 2012, 16:04
von /me
JoniP10 hat geschrieben:Könntet ihr mir vielleicht noch ein paar gute Tutorials oder Bücher über das Thema empfehlen?
Je nachdem, auf welchem Level du anfangen willst. Ich arbeite mich gerade durch "Foundations of Python Network Programming" von Brandon Rhodes und John Goerzen. Das startet auf ziemlich tiefen Ebenen.

Re: Python Sever erstellen [Anfänger]

Verfasst: Donnerstag 23. Februar 2012, 16:12
von deets
@JoniP10

Wofuer ein Tutorial? Fuer Python, fuer ein bestimmtes Webframework, oder fuer HTTP generell? Fuer letzteres zumindest faellt mir nix ein - aber du kannst dir zB mal den Code fuer "cling" anschauen, ein minimaler statischer WSGI-server, den man auch stand-alone benutzen kann. Daraus kannst du lernen.

Re: Python Sever erstellen [Anfänger]

Verfasst: Donnerstag 23. Februar 2012, 16:20
von JoniP10
Ja, soweit ich gelesen habe ist dieses Buch gut. Ich werde mich in dieses Tutorial einarbeiten, und dann erst mit meinen Programmen weiterarbeiten.
Thx für eure Hilfe!

Re: Python Sever erstellen [Anfänger]

Verfasst: Donnerstag 23. Februar 2012, 18:52
von Kebap
deets hat geschrieben:fuer HTTP generell? Fuer letzteres zumindest faellt mir nix ein
http://de.selfhtml.org/ fand ich ganz gut, auch als Nachschlagewerk

Re: Python Sever erstellen [Anfänger]

Verfasst: Donnerstag 23. Februar 2012, 19:10
von deets
Abgesehen davon, dass das leider immer mehr veraltet - mit HTTP hat das nix zu tun. Es dreht sich um HTML.

Re: Python Sever erstellen [Anfänger]

Verfasst: Donnerstag 23. Februar 2012, 19:22
von nomnom
Kebap hat geschrieben:http://de.selfhtml.org/ fand ich ganz gut, auch als Nachschlagewerk
Es geht aber um HTTP.
Edit: Hab die zweite Seite übersehen …

Re: Python Sever erstellen [Anfänger]

Verfasst: Montag 27. Februar 2012, 06:56
von Leonidas
lunar hat geschrieben:Der in Python eingebaute HTTP-Server kann so ohne weiteres keine Dateien aufliefern oder Verzeichnisse auflisten.
Hat sich das in Python 3 verändert? Weil in Python 2 ging ``python2 -m SimpleHTTPServer 8080` wo er dann das aktuelle Verzeichnis ausliefert, an Port 8080, zusammen mit Directory Listing. Nutze ich ganz gerne für JS-Entwicklung.

Re: Python Sever erstellen [Anfänger]

Verfasst: Montag 27. Februar 2012, 09:18
von deets
Was damit gemeint ist: wenn man damit programmatisch arbeitet, dann gibt es kein Root-Dir, oder auch keine mod_proxy/mod_rewrite/mod_redirect artigen Funktionen. Von der standalone-Geschichte wusste ich nix, aber natuerlich waere die mal interessant fuer den OP zu sehen, wie man sowas implementiert.

Re: Python Sever erstellen [Anfänger]

Verfasst: Montag 27. Februar 2012, 09:31
von BlackJack
Also mein HTTP/CGI-Mini-Test-Server sah so aus:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Very simple HTTP server with CGI support."""

__author__ = "Marc 'BlackJack' Rintsch"
__version__ = '0.1.0'
__revision__ = '$Rev$'
__date__ = '$Date$'

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

def start_server(host='', port=8090):
    """Starts server, listening to given port on given host."""
    print "Start listening on %s:%d" % (host, port)
    try:
        HTTPServer((host, port), CGIHTTPRequestHandler).serve_forever()
    except KeyboardInterrupt:
        print "Ctrl+C caught.  Ciao..."

if __name__ == '__main__':
    start_server()