python httpserver模塊 添加ipv6的支持

Introduction

原來寫過Python救急HttpServer和Ftpserver,來一句話迅速建立一個httpserver,供文件傳輸,但是只支持單線程,後續更新了下python多線程啟動httpserver,但是仍然不支持ipv6,現在繼續添加對ipv6支持的方法。

教育網一般都支持ipv6,走ipv6一般都可以到100Mbps的極限(10MB/s左右),搬瓦工VPS支持ipv6,這樣可以充分利用vps的網路速度,一般搬瓦工的下載速度可以到50MB/s,就算再通過ipv6傳回來,速度加成也是非常明顯。

這裡提供幾種簡單的方法使python的httpserver支持ipv6。

下文均已python3 為例,python2同理。

1.修改http.server模塊的原文件

1.1 獲得python模塊的地址

import httphttp.__path__

就可以獲得http模塊文件的地址,默認一般是/usr/lib/python3.4/http,

1.2 修改server模塊內容

在python官網我們可以看到有這樣一個bug報告Allow IPv6 bind in http.server,維護人員也給了一個補丁,但是應該還沒有添加到一些linux源里。補丁內容很簡單,如下:

--- a/Lib/http/server.py+++ b/Lib/http/server.py@@ -1173,6 +1173,9 @@ """ server_address = (bind, port)+ if : in bind:+ ServerClass.address_family = socket.AF_INET6+ HandlerClass.protocol_version = protocol httpd = ServerClass(server_address, HandlerClass)

即在server模塊中添加了兩行(行首有加號的),在/usr/lib/python3.4/http/server.py找到對應行,自己手動添加即可。

然後通過python3 -m http.server -b ::綁定本機即可運行。通過訪問http://[::]:8000來測試是否開啟成功。

2. 自定義httpserver

參考github python2 ipv6-httpd.py

import http.serverimport socketserverimport socketclass HTTPServerV6(http.server.HTTPServer): address_family = socket.AF_INET6Handler = http.server.SimpleHTTPRequestHandlerserver = HTTPServerV6((::, 8000), Handler)server.serve_forever()

python3運行這個文件,仍然通過訪問http://[::]:8000來測試是否開啟成功。

3. 遠程訪問

比如在vps上開啟了httpserver之後,可以通過訪問

http://[your_ip_v6_address]:8000訪問,下載地址自然也是ipv6的地址。

推薦閱讀:

TAG:Python | Python入門 | Python教程 |