Αποστολέας Θέμα: Εκκίνηση web/file server με μια μόνο εντολή  (Αναγνώστηκε 1446 φορές)

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5702
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Εκκίνηση web/file server με μια μόνο εντολή
« στις: 30 Ιαν 2012, 01:07:01 μμ »
Ένας γρήγορος τρόπος να μοιράσουμε αρχεία στο τοπικό δίκτυο είναι να πάμε στον κατάλογο που θέλουμε και να τρέξουμε την παρακάτω εντολή:
Κώδικας: Text
  1. python -m SimpleHTTPServer
  2.  

Αυτή η εντολή ξεκινάει έναν μικρό web server ο οποίος σερβίρει τα περιεχόμενα του τρέχοντος καταλόγου στο δίκτυο. Επειδή από προεπιλογής χρησιμοποιεί τη θύρα 8000, δεν συγκρούεται με άλλους web servers που πιθανώς να έχουμε εγκατεστημένους.

Παράδειγμα. Έστω ότι θέλουμε να στείλουμε τον win32-loader.exe boot loader στους clients μας που έχουν Windows 2000, και δεν θέλουμε να εγκαταστήσουμε κοινή χρήση αρχείων (samba) στο server. Πηγαίνουμε στον κατάλογο που έχουμε τον win32-loader με την εντολή cd, τρέχουμε τον SimpleHTTPServer όπως προαναφέρθηκε, και στη συνέχεια από τους clients ανοίγουμε τον web browser μας και επισκεπτόμαστε τη διεύθυνση http://server-ip:8000. Εκεί θα δούμε μια ιστοσελίδα σαν την παρακάτω:

Παράθεση
Directory listing for /

  • win32-loader
  • other-files
  • more-files

...από όπου και κατεβάζουμε εύκολα τα αρχεία που μας ενδιαφέρουν.

apanagio

  • ΟΔΕ
  • *
  • Μηνύματα: 163
Απ: Εκκίνηση web/file server με μια μόνο εντολή
« Απάντηση #1 στις: 03 Φεβ 2012, 02:15:42 μμ »
Πολύ ωραίο tip αυτό.
Ένα θέμα που υπάρχει είναι με τα ελληνικά ονόματα αρχείων.
Για να το διορθώσουμε αρκεί να πούμε στο server να στέλνει charset utf8 (το charset του filesystem για την ακρίβεια) στα headers
Ανοίγουμε το SimpleHTTPServer.py
Κώδικας: [Επιλογή]
sudo gedit /usr/lib/python2.6/SimpleHTTPServer.pyΠροσθέτουμε στα imports τη γραμμη
Κώδικας: [Επιλογή]
import sysΛίγο μετα τη γραμμή 130 που λέει
Κώδικας: [Επιλογή]
length = f.tell()
        f.seek(0)
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.send_header("Content-Length", str(length))
        self.end_headers()
        return f
αντικαθιστούμε τη γραμμή
Κώδικας: [Επιλογή]
self.send_header("Content-type", "text/html")με τις γραμμές
Κώδικας: [Επιλογή]
encoding = sys.getfilesystemencoding()
self.send_header("Content-type", "text/html; charset=%s" % encoding)

Πηγή:
http://bugs.python.org/issue11442
http://hg.python.org/cpython/rev/e9724d7abbc2

gidarakos

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 348
    • http://www.gidarakos.com/
Απ: Εκκίνηση web/file server με μια μόνο εντολή
« Απάντηση #2 στις: 18 Δεκ 2015, 12:45:56 μμ »
Μία μικρή επικαιροποίηση στο:
Ανοίγουμε το SimpleHTTPServer.py
Κώδικας: [Επιλογή]
sudo gedit /usr/lib/python2.6/SimpleHTTPServer.py

Με αυτό:
Κώδικας: Bash
  1. sudo gedit /usr/lib/python2.7/SimpleHTTPServer.py

Αν και όπως είδα πλέον είναι διορθωμένο, οπότε λογικά δεν πρέπει να υπάρχει πρόβλημα με τα ελληνικά ονόματα αρχείων!
« Τελευταία τροποποίηση: 18 Δεκ 2015, 01:03:38 μμ από gidarakos »