basehttpserver不响应其他请求

时间:2017-04-19 15:41:20

标签: python python-2.7

当我在Android(192.168.1.4)和PC上同时打开我的本地服务器时,PC从不显示页面(它正在加载和加载......) - 当我杀死我的服务器时出现此错误:

Exception happened during processing of request from ('192.168.1.4', 54734)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 655, in __init__
    self.handle()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
    self.handle_one_request()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 310, in handle_one_request
    self.raw_requestline = self.rfile.readline(65537)
  File "/usr/lib/python2.7/socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)
KeyboardInterrupt

我的服务器脚本:

# !/usr/bin/env python
# -*- coding: utf-8 -*-
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

PORT = 20000


class S(BaseHTTPRequestHandler):
    def log_message(self, format, *args):
        return

    def _set_headers(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.send_header('Access-Control-Allow-Origin', '*')
        self.end_headers()

    def do_GET(self):
        self._set_headers()
        if self.path == "/other":
            self.wfile.write("other")

        if self.path == "/something":
            self.wfile.write('something')

    def do_HEAD(self):
        self._set_headers()

    def do_POST(self):
        self._set_headers()
        self.wfile.write("hello post")


def run(server_class=HTTPServer, handler_class=S, port=PORT):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()


if __name__ == "__main__":
    from sys import argv

    if len(argv) == 2:
        run(port=int(argv[1]))
    else:
        run()

我的代码有什么问题?

3 个答案:

答案 0 :(得分:0)

我认为您的服务器运行良好:与任何服务器一样,它可以无限期运行。

要查看它是否有效,只需将浏览器指向以下网址:http://localhost:20000/somethinghttp://127.0.0.1:20000/something

你应该得到文字“某事”。

您应该考虑使用Flask

答案 1 :(得分:0)

不知道,如果这是正确的方法,但设置超时有助于:

...
        def log_message(self, format, *args):
            return
        def setup(self):
            BaseHTTPRequestHandler.setup(self)
            self.request.settimeout(0.5)
...

答案 2 :(得分:0)

https://pymotw.com/2/BaseHTTPServer/#threading-and-forking说:

  

HTTPServer是SocketServer.TCPServer的简单子类,不使用多个线程或进程来处理请求。要添加线程或分叉,请使用SocketServer中的相应混合创建一个新类。