2015-05-30 7 views
1

Это используя питон 2.7.6Невозможно обслуживать файлы в локальном каталоге, используя SocketServer & BaseHTTPServer

Я пытаюсь служить файлы из моей локальной, текущей рабочей директории. Я пытаюсь настроить сервер, который запускается из этого каталога, но не смог отобразить его файлы.

Я пытался запустить найденный код here, чтобы настроить сервер, который прослушивает HTTP-запросы в текущем каталоге, но не успел отобразить файлы.

Я пытался отобразить html-файл images.html, который существует в этом каталоге, но когда я запускаю следующий скрипт и перехожу в 127.0.0.1:8000/images.html в свой браузер, я просто получаю пустую страницу , Это также происходит при попытке перейти к 127.0.0.1:8000/ для отображения содержимого каталога.

import SocketServer 
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 


class MyHandler(BaseHTTPRequestHandler): 
    def do_GET(self): 
     print self.path 
     self.send_response(200) 


httpd = SocketServer.TCPServer(("", 8000), MyHandler) 
httpd.serve_forever() 

Сервер работает как когда я перейти к 127.0.0.1:8000/images.html я получаю ожидаемый вывод командной строки:

127.0.0.1 - - [29/May/2015 20:03:43] "GET /images.html HTTP/1.1" 200 - 
/images.html 

Однако, если я бегу

python -m SimpleHTTPServer 8000 

из текущей директории и перейти к 127.0.0.1:8000/images.html, html-файл делает дисплей, как ожидалось.

Что мне не хватает?

ответ

3

Вы предоставляете свой собственный обработчик для сервера. Когда запрос GET приходит, он вызывает ваш обработчик, чтобы попытаться выполнить запрос. Однако ваш обработчик не загружает файлы с диска и не записывает их в сокет (может быть сделано с помощью self.wfile.write). Таким образом, вы переопределяете поведение по умолчанию для do_GET, которое должно было бы либо отправить обратно список каталогов, либо файл, который был запрошен, и вместо этого направлять его на то, чтобы ничего не делать (ну, печатать на stdout) при обработке этих запросов.

Возможно, вы захотите посмотреть пример на https://wiki.python.org/moin/BaseHttpServer, чтобы увидеть пример, в котором есть обработчик, который пытается на самом деле что-то делать.

Смежные вопросы