Python 3:http.server是否支持ipv6?

时间:2014-09-12 22:36:42

标签: python-3.x webserver ipv6

http.serverhttp是否是Python 3.x模块)是否支持ipv6?例如,使用此命令行代码(启动Web服务器):

python -m http.server [port]

4 个答案:

答案 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(请参阅documentationbug 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文件似乎很极端。