Python测试httpserver:我做错了什么?

2024-09-29 23:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我的个人物联网项目编写一个测试http服务器“我得走了。我的项目有自己的web服务器,可以响应某些“页面加载”请求。现在我正在尝试扩展网页本身。现在我可以同时开发实际的服务器,但每次迭代都会将其下载到IoT设备上,速度非常慢,因此我决定在我的机器上编写一个测试服务器

测试服务器是用python编写的。下面的代码是整个测试服务器:

import http.server
import socketserver
import string

PORT = 8000

class MyHandler(http.server.SimpleHTTPRequestHandler):

    def __init__(self):
        self.pageFuncs = { "/Lights": self.doLightsPage,
                           "/Show": self.doShowPage,
                           "/Static": self.doShowTypePage,
                           "/Effects": self.doShowTypePage,
                           "/Playlist": self.doShowTypePage,
                           "/Select": self.doControlTypePage,
                           "/Controls": self.doControlTypePage,
                           "/query": self.doQueryResultsPage }

        self.STATIC_SHOW_TYPE = 0
        self.EFFECTS_SHOW_TYPE = 1
        self.PLAYLIST_SHOW_TYPE = 2

        self.SELECT_CTRL_TYPE = 0
        self.CONTROL_CTRL_TYPE = 1

        self.LightsOn = 0
        self.LightShowOn = 0

        self.showType = STATIC_SHOW_TYPE
        self.ctrlType = SELECT_CTRL_TYPE

    def do_GET(self):
        try:
            page_name = self.path
            if (page_name in pageFuncs):
                print (page_name)
                self.send_response(200)
                self.send_header("Content-type", "text/json")
                self.end_headers()
                self.pageFuncs[page_name](self)
                return
            else:
                super().do_GET()

        except IOError:
            self.send_error(404,'File Not Found: %s' % self.path)

        except :
            pass

    def doLightsPage(self):
        self.bLightsOn ^= 1
        return doQueryResultsPage()

    def doShowPage(self):
        self.bLightShowOn ^= 1
        return doQueryResultsPage()

    def doShowTypePage(self):
        if (self.path == '/Static') :
            self.showType = STATIC_SHOW_TYPE
        elif (self.path == '/Effects') :
            self.showType = EFFECTS_SHOW_TYPE
        else :
            self.showType = PLAYLIST_SHOW_TYPE
        return doQueryResultsPage()

    def doControlTypePage(self):
        if (self.path == '/Select') :
            self.ctrlType = SELECT_CTRL_TYPE
        else :
            self.ctrlType = CONTROL_CTRL_TYPE
        return doQueryResultsPage()

    def doQueryResultsPage(self):
        json_data  = '{ \"power\": {}, \"show\": {},'
        json_data += '\"show_type\": {}, \"control_type\": {} }'
        json_data = format(json_data, bLightsOn, bLightShowOn, showType, ctrlType);
        self.write(json_data)

def main():
    try:
        server = socketserver.TCPServer(("", PORT), MyHandler)
        print ('started httpserver...')
        server.serve_forever()
    except KeyboardInterrupt:
        print ('^C received, shutting down server')
        server.socket.close()

if __name__ == '__main__':
    main()

测试的目的是接收有效的请求;更改一个值并返回反映服务器内部状态的json字符串

但是,当我尝试加载任何页面时,我会收到以下错误消息:

Exception happened during processing of request from ('127.0.0.1', 50149)
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.752.0_x64__qbz5n2kfra8p0\lib\socketserver.py", line 316, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.752.0_x64__qbz5n2kfra8p0\lib\socketserver.py", line 347, in process_request
    self.finish_request(request, client_address)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.752.0_x64__qbz5n2kfra8p0\lib\socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
TypeError: __init__() takes 0 positional arguments but 4 were given

所以我的问题是,我做错了什么?

我从下面的stackoverflow topic中获取了代码格式,它似乎试图做同样的事情,也许我误解了什么


Tags: pathnameself服务器jsonreturnserverrequest

热门问题