当我同时在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()我的代码出了什么问题?
发布于 2017-04-19 23:53:18
我认为你的服务器运行得很好:像任何服务器一样,它可以无限地运行。
要查看它的工作情况,只需将您的浏览器指向以下网址:http://localhost:20000/something或http://127.0.0.1:20000/something。
你应该得到文本"something“。
您应该考虑使用Flask。
发布于 2017-04-20 00:08:44
不知道这是不是正确的方法,但是设置超时很有帮助:
...
def log_message(self, format, *args):
return
def setup(self):
BaseHTTPRequestHandler.setup(self)
self.request.settimeout(0.5)
...发布于 2017-04-20 00:18:32
https://pymotw.com/2/BaseHTTPServer/#threading-and-forking说:
HTTPServer是SocketServer.TCPServer的一个简单子类,不使用多个线程或进程来处理请求。要添加线程或分支,请使用来自SocketServer的适当混合创建一个新类。
https://stackoverflow.com/questions/43500318
复制相似问题