SocketServer Python

SocketServer Python,python,python-2.7,sockets,web,websocket,Python,Python 2.7,Sockets,Web,Websocket,因此,我找到了下面的示例代码,它允许在给定的url和端口上建立基本的python HTTP服务器。我对web服务器非常缺乏经验,并且正在尝试为特定的GET请求创建处理程序。然而,当远程访问此URL时,我不知道如何为另一台计算机发出的GET请求实际创建处理程序。有什么建议吗 import SocketServer class MyTCPHandler(SocketServer.BaseRequestHandler): """ The RequestHandler class for our se

因此,我找到了下面的示例代码,它允许在给定的url和端口上建立基本的python HTTP服务器。我对web服务器非常缺乏经验,并且正在尝试为特定的GET请求创建处理程序。然而,当远程访问此URL时,我不知道如何为另一台计算机发出的GET请求实际创建处理程序。有什么建议吗

import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):
"""
The RequestHandler class for our server.

It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""

def handle(self):
    # self.request is the TCP socket connected to the client
    self.data = self.request.recv(1024).strip()
    print "{} wrote:".format(self.client_address[0])
    print self.data

    # just send back the same data, but upper-cased
    self.request.sendall(self.data.upper())

if __name__ == "__main__":
HOST, PORT = "url" , PORT

# Create the server, binding to localhost on port 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()

下面是一个非常简单的例子,说明它是如何工作的。您可以从这个开始,用这个来调用它,例如:

curl -i 'http://localhost:5001/foo/bar?foo=bar' -X POST -d '{"Foo":"Bar"}'
HTTP/1.1 200 OK

Some response%
它缺少很多东西,但这至少能给你一些想法

import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        self.data = self.request.recv(1024).strip()
        print self.data
        self.parse_request(self.data)
        func, args = self.path.split("/", 1)
        args = args.split("/")
        resp = getattr(self, func)(*args)
        self.request.sendall("HTTP/1.1 200 OK\n")
        self.request.sendall("\n")
        self.request.sendall(resp)

    def parse_request(self, req):
        headers = {}
        lines = req.splitlines()
        inbody = False
        body = ''
        for line in lines[1:]:
            if line.strip() == "":
                inbody = True
            if inbody:
                body += line
            else:
                k, v = line.split(":", 1)
                headers[k.strip()] = v.strip()
        method, path, _ = lines[0].split()
        self.path = path.lstrip("/")
        self.method = method
        self.headers = headers
        self.body = body
        self.path, self.query_string = self.path.split("?")

    def foo(self, *args):
        print self.path
        print self.query_string
        print self.body
        print self.headers
        print self.method
        return "Some response"

if __name__ == "__main__":
    server = SocketServer.TCPServer(("localhost", 5001), MyTCPHandler)
    server.serve_forever()

有更高级别的框架,可以轻松地为某些请求的路径定义要调用的函数,比如瓶子、烧瓶、django等等,那么我该如何在代码中实现它们呢?