首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >basehttpserver不响应其他请求

basehttpserver不响应其他请求
EN

Stack Overflow用户
提问于 2017-04-19 23:41:20
回答 3查看 581关注 0票数 0

当我同时在Android (192.168.1.4)和pc上打开我的本地服务器时,pc永远不会显示页面(它正在加载和加载...)-当我关闭我的服务器时,这个错误就会出现:

代码语言:javascript
复制
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

我的服务器脚本:

代码语言:javascript
复制
# !/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()

我的代码出了什么问题?

EN

回答 3

Stack Overflow用户

发布于 2017-04-19 23:53:18

我认为你的服务器运行得很好:像任何服务器一样,它可以无限地运行。

要查看它的工作情况,只需将您的浏览器指向以下网址:http://localhost:20000/somethinghttp://127.0.0.1:20000/something

你应该得到文本"something“。

您应该考虑使用Flask

票数 0
EN

Stack Overflow用户

发布于 2017-04-20 00:08:44

不知道这是不是正确的方法,但是设置超时很有帮助:

代码语言:javascript
复制
...
        def log_message(self, format, *args):
            return
        def setup(self):
            BaseHTTPRequestHandler.setup(self)
            self.request.settimeout(0.5)
...
票数 0
EN

Stack Overflow用户

发布于 2017-04-20 00:18:32

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43500318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档