http.server
(http
是否是Python 3.x模块)是否支持ipv6?例如,使用此命令行代码(启动Web服务器):
python -m http.server [port]
答案 0 :(得分:6)
是的,确实如此。定义服务器时,请执行此操作,如here所示。
import socket
from BaseHTTPServer import HTTPServer
class HTTPServerV6(HTTPServer):
address_family = socket.AF_INET6
然后像这样听:
server = HTTPServerV6(('::', 8080), MyHandler)
server.serve_forever()
答案 1 :(得分:6)
在Python 3中有一个允许在http.server
中进行IPv6绑定的补丁。我试过它,发现它可以在我的笔记本电脑上运行。
有关详细信息,请访问https://bugs.python.org/issue24209。
或者只需执行以下操作:
将+
之后的行添加到文件/your/path/to/python/Lib/http/server.py
。
请注意,没有+
的行是server.py
的原始代码。
server_address = (bind, port)
+ if ':' in bind:
+ ServerClass.address_family = socket.AF_INET6
+
HandlerClass.protocal_version = protocol
httpd = ServerClass(server_address, HandlerClass)
然后尝试:
python -m http.server -b *your-ipv6-addr* *your-port*
答案 2 :(得分:3)
从Python 3.8开始,python -m http.server
支持IPv6(请参阅documentation和bug report with implementation history)。
要在所有可用接口上进行监听:
python -m http.server --bind ::
Python 3.8目前仍在开发中,并且3.8.0的最终发行版是planned for 2019-10-21。
答案 3 :(得分:0)
Oliver Bock的Python 3版本(直到3.8)的确如下所示:
myserver.py:
from http.server import HTTPServer
from http.server import SimpleHTTPRequestHandler
import socket
class HTTPServerV6(HTTPServer):
address_family = socket.AF_INET6
server = HTTPServerV6(('::', 8080), SimpleHTTPRequestHandler)
server.serve_forever()
修改内部Edward Zhang这样的内部Python 3文件似乎很极端。