使用http.server访问底层套接字

时间:2018-06-12 16:37:20

标签: python server

我有以下代码来运行简单的http服务器

from http.server import SimpleHTTPRequestHandler, HTTPServer

host = "localhost"
port = 8881
server_class = HTTPServer
httpd = server_class((host, port), SimpleHTTPRequestHandler)
print("http server is running {}:{}".format(host, port))
try:
    httpd.serve_forever()
except KeyboardInterrupt:
    pass
httpd.server_close()

在我的代码中的某个时刻,我想访问服务器的底层套接字s(我假设必须以某种方式进行访问)以执行类似s.getsockname()之类的操作。这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以像$_GET一样访问它。

self.socket

有关详细信息,请参阅基类SocketServer的源代码。

但是,对于此用例,正确的方法是httpd.socket.getsockname() 。通常,您不应该尝试使用原始套接字。另外,我会跳过httpd.server_address变量,然后转到server_class以保持简单。