使用Python實現(xiàn)快速搭建本地HTTP服務器
1. 概述
你是否曾經遇到過這樣的場景:
- 需要在多臺設備間快速傳輸文件,但懶得插 U 盤?
- 想臨時共享一個本地文件,但又不想折騰 FTP、網(wǎng)盤、郵件?
- 希望一鍵開啟本地 HTTP 服務器,還能生成二維碼,手機直接掃碼訪問?

今天,我們就用 Python 輕松實現(xiàn) “一鍵 HTTP 文件共享”,同時結合二維碼技術,讓訪問更簡單。最終,我們還將用 PyQt6 開發(fā)一個簡潔美觀的 GUI,讓整個工具更易用!
本文將帶你完整實現(xiàn)該工具,包括:
用 Python 快速搭建本地 HTTP 服務器(支持 IPv4 & IPv6)
自動生成訪問地址的二維碼,手機掃一掃即可訪問
打造 PyQt6 圖形界面,一鍵選擇共享目錄并啟動服務
準備好了嗎?讓我們開始吧!
2. 快速搭建 HTTP 文件共享服務
2.1 核心思路
Python 自帶 http.server 模塊,可以快速啟動一個 HTTP 服務器。我們基于它創(chuàng)建支持 IPv4 和 IPv6 的雙棧服務器,并允許用戶自定義共享目錄。
2.2 代碼實現(xiàn)
import http.server
import socketserver
import threading
class Server:
def __init__(self, port=80):
self.port = port
self.stop_event = threading.Event()
def run_server(self, ipv4="0.0.0.0", ipv6="::"):
self.stop_event.clear()
threading.Thread(target=self.start_http_server_v4, args=(ipv4, self.port)).start()
threading.Thread(target=self.start_http_server_v6, args=(ipv6, self.port)).start()
def start_http_server_v4(self, ip, port):
with socketserver.TCPServer((ip, port), http.server.SimpleHTTPRequestHandler) as httpd:
httpd.serve_forever()
def start_http_server_v6(self, ip, port):
with socketserver.TCPServer((ip, port), http.server.SimpleHTTPRequestHandler) as httpd:
httpd.serve_forever()
2.3 代碼解讀
- run_server() 方法啟動兩個線程,同時運行 IPv4 和 IPv6 服務器。
- http.server.SimpleHTTPRequestHandler 允許 HTTP 服務器直接提供文件下載。
- serve_forever() 讓服務器一直運行,直到手動停止。
這樣,我們的本地 HTTP 服務器就可以隨時啟動,提供文件共享服務!
3. 二維碼訪問:手機掃一掃,文件即刻傳輸
3.1 為什么用二維碼
問題:服務器啟動后,如何讓手機或其他設備快速訪問?
解決方案:生成一個二維碼,直接嵌入本地 HTTP 服務器的訪問 URL,用戶用手機掃描即可訪問!
3.2 代碼實現(xiàn)
import qrcode
import clipboard
def generate_qr_and_copy(url):
qr = qrcode.QRCode(
version=1, error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10, border=2
)
qr.add_data(url)
qr.make(fit=True)
qr.print_ascii(invert=True)
clipboard.copy(url)
print(f"URL {url} 已復制到剪貼板")
3.3 代碼解讀
- qrcode.QRCode 生成二維碼,并自動調整大小。
- qr.print_ascii(invert=True) 在終端打印二維碼,便于調試。
- clipboard.copy(url) 復制 URL,方便直接粘貼使用。
現(xiàn)在,用戶只需要掃描二維碼,即可訪問共享的文件!
4. PyQt6 圖形界面:讓工具更易用!
4.1 為什么要 GUI
雖然命令行很強大,但對于非開發(fā)者來說,圖形界面更直觀。我們使用 PyQt6 創(chuàng)建一個簡潔的 UI,用戶可以一鍵選擇共享目錄,并獲取訪問二維碼。
4.2 代碼實現(xiàn)
from PyQt6 import QtWidgets, QtCore
from PyQt6.QtGui import QGuiApplication
class Ui_MainWindow:
def setupUi(self, MainWindow):
screen = QGuiApplication.primaryScreen().geometry()
window_width, window_height = int(screen.width() / 6), int(screen.height() / 3)
MainWindow.resize(window_width, window_height)
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.gridLayout = QtWidgets.QGridLayout(self.centralWidget)
self.label = QtWidgets.QLabel("二維碼", self.centralWidget)
self.gridLayout.addWidget(self.label, 0, 0)
self.comboBox = QtWidgets.QComboBox(self.centralWidget)
self.comboBox.addItems(["默認目錄", "剪切板目錄", "自定義目錄"])
self.gridLayout.addWidget(self.comboBox, 1, 0)
self.url_label = QtWidgets.QLabel("服務地址", self.centralWidget)
self.gridLayout.addWidget(self.url_label, 2, 0)
MainWindow.setCentralWidget(self.centralWidget)
4.3 界面功能
? 選擇共享目錄
? 顯示服務器訪問地址
? 二維碼自動更新
5. 終極效果演示



- 運行 GUI,選擇共享目錄
- 點擊“啟動服務器”
- 獲取 URL 并自動生成二維碼
- 手機掃碼即可訪問!
這樣,我們的“Python 本地 HTTP 文件共享 + 二維碼訪問”工具就完成了!
6. 總結 & 未來優(yōu)化方向
6.1 主要收獲
? 你學會了 如何用 Python 搭建本地 HTTP 服務器
? 你掌握了 二維碼的生成和自動復制功能
? 你了解了 如何用 PyQt6 創(chuàng)建 GUI 界面
6.2 未來優(yōu)化
支持文件上傳:目前只支持下載,可以加上文件上傳功能
支持 HTTPS 加密:增強安全性,防止中間人攻擊
優(yōu)化界面美觀度:增加主題風格、自定義端口等
到此這篇關于使用Python實現(xiàn)快速搭建本地HTTP服務器的文章就介紹到這了,更多相關Python本地HTTP服務器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方
本文主要介紹了Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方案大全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧Chat?Gpt<BR>2023-07-07
Python的pytest測試框架中fixture的使用詳解
這篇文章主要介紹了pytest中fixture的使用詳解,pytest是一個非常成熟的全功能的Python測試框架,能夠支持簡單的單元測試和復雜的功能測試,還可以用來做selenium/appnium等自動化測試、接口自動化測試,需要的朋友可以參考下2023-07-07
opencv-python圖像配準(匹配和疊加)的實現(xiàn)
圖像配準需是指對不同條件下得到的兩幅或多幅圖像進行匹配、疊加的過程。本文詳細的介紹了如何使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06
使用python和opencv的mask實現(xiàn)摳圖疊加
這篇文章主要介紹了使用python和opencv的mask實現(xiàn)摳圖疊加操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

