BaseHTTPServer仅提供一次网页服务

时间:2015-11-09 19:53:05

标签: python basehttpserver basehttprequesthandler

我试图弄清楚如何在Python中设置基本的Web服务器,但我遇到了很多困难。

我的主要问题是我只能让我的服务器提供一次网页服务。 html在浏览器中显示一条消息,Javascript在控制台中显示另一条消息。

当我启动服务器并转到http://127.0.0.1:8080时,我的两条消息都会显示,一切正常。但是,当我打开第二个浏览器选项卡并再次访问时,我遇到了问题。我在终端中获得了GET HTTP请求,但没有获得GET Javascript请求。浏览器窗口或控制台中都没有显示任何内容。

我做错了什么?任何建议将不胜感激。

这是我的Python代码:

import BaseHTTPServer
from os import curdir, sep

htmlfile="htmltest.html"
htmlpage =open(curdir+sep+htmlfile, 'rb')
jsfile="jstest.js"
jspage=open(curdir+sep+jsfile, 'rb')
notfound = "File not found"

class WelcomeHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_OPTIONS(self):
        self.send_response(200)
        self.send_header('Access-Control-Allow-Origin', '*')                
        self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
        self.send_header("Access-Control-Allow-Headers", "X-Requested-With") 

    def do_GET(self):
        if self.path == "/":
            print "get html"
            self.send_response(200)
            self.send_header("Content-type","text/html")
            self.end_headers()
            self.wfile.write(htmlpage.read())
        elif self.path=="/jstest.js":
            print "get js"
            self.send_response(200)
            self.send_header("Content-type","text/js")
            self.end_headers()
            self.wfile.write(jspage.read())
        else:
            self.send_error(404, notfound)

httpserver = BaseHTTPServer.HTTPServer(("127.0.0.1",8080), WelcomeHandler)
#httpserver.serve_forever()
while True:
    httpserver.handle_request()

1 个答案:

答案 0 :(得分:1)

当您在Python中open文件并且read其内容时,“文件指针”(即下一个read将从哪里开始)就在文件的末尾。你要么必须重新打开它,要么倒回到文件的开头,以便再次阅读。

除非您希望文件经常更改,否则您可能只想在开始时阅读它们并将内容存储在变量中,然后将其提供。或者,您可以将open移动到do_GET方法中,以便为每个请求重新打开它。