使用Python實(shí)現(xiàn)快速搭建本地HTTP服務(wù)器
1. 概述
你是否曾經(jīng)遇到過這樣的場景:
- 需要在多臺(tái)設(shè)備間快速傳輸文件,但懶得插 U 盤?
- 想臨時(shí)共享一個(gè)本地文件,但又不想折騰 FTP、網(wǎng)盤、郵件?
- 希望一鍵開啟本地 HTTP 服務(wù)器,還能生成二維碼,手機(jī)直接掃碼訪問?
今天,我們就用 Python 輕松實(shí)現(xiàn) “一鍵 HTTP 文件共享”,同時(shí)結(jié)合二維碼技術(shù),讓訪問更簡單。最終,我們還將用 PyQt6 開發(fā)一個(gè)簡潔美觀的 GUI,讓整個(gè)工具更易用!
本文將帶你完整實(shí)現(xiàn)該工具,包括:
用 Python 快速搭建本地 HTTP 服務(wù)器(支持 IPv4 & IPv6)
自動(dòng)生成訪問地址的二維碼,手機(jī)掃一掃即可訪問
打造 PyQt6 圖形界面,一鍵選擇共享目錄并啟動(dòng)服務(wù)
準(zhǔn)備好了嗎?讓我們開始吧!
2. 快速搭建 HTTP 文件共享服務(wù)
2.1 核心思路
Python 自帶 http.server 模塊,可以快速啟動(dòng)一個(gè) HTTP 服務(wù)器。我們基于它創(chuàng)建支持 IPv4 和 IPv6 的雙棧服務(wù)器,并允許用戶自定義共享目錄。
2.2 代碼實(shí)現(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() 方法啟動(dòng)兩個(gè)線程,同時(shí)運(yùn)行 IPv4 和 IPv6 服務(wù)器。
- http.server.SimpleHTTPRequestHandler 允許 HTTP 服務(wù)器直接提供文件下載。
- serve_forever() 讓服務(wù)器一直運(yùn)行,直到手動(dòng)停止。
這樣,我們的本地 HTTP 服務(wù)器就可以隨時(shí)啟動(dòng),提供文件共享服務(wù)!
3. 二維碼訪問:手機(jī)掃一掃,文件即刻傳輸
3.1 為什么用二維碼
問題:服務(wù)器啟動(dòng)后,如何讓手機(jī)或其他設(shè)備快速訪問?
解決方案:生成一個(gè)二維碼,直接嵌入本地 HTTP 服務(wù)器的訪問 URL,用戶用手機(jī)掃描即可訪問!
3.2 代碼實(shí)現(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} 已復(fù)制到剪貼板")
3.3 代碼解讀
- qrcode.QRCode 生成二維碼,并自動(dòng)調(diào)整大小。
- qr.print_ascii(invert=True) 在終端打印二維碼,便于調(diào)試。
- clipboard.copy(url) 復(fù)制 URL,方便直接粘貼使用。
現(xiàn)在,用戶只需要掃描二維碼,即可訪問共享的文件!
4. PyQt6 圖形界面:讓工具更易用!
4.1 為什么要 GUI
雖然命令行很強(qiáng)大,但對(duì)于非開發(fā)者來說,圖形界面更直觀。我們使用 PyQt6 創(chuàng)建一個(gè)簡潔的 UI,用戶可以一鍵選擇共享目錄,并獲取訪問二維碼。
4.2 代碼實(shí)現(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(["默認(rèn)目錄", "剪切板目錄", "自定義目錄"]) self.gridLayout.addWidget(self.comboBox, 1, 0) self.url_label = QtWidgets.QLabel("服務(wù)地址", self.centralWidget) self.gridLayout.addWidget(self.url_label, 2, 0) MainWindow.setCentralWidget(self.centralWidget)
4.3 界面功能
? 選擇共享目錄
? 顯示服務(wù)器訪問地址
? 二維碼自動(dòng)更新
5. 終極效果演示
- 運(yùn)行 GUI,選擇共享目錄
- 點(diǎn)擊“啟動(dòng)服務(wù)器”
- 獲取 URL 并自動(dòng)生成二維碼
- 手機(jī)掃碼即可訪問!
這樣,我們的“Python 本地 HTTP 文件共享 + 二維碼訪問”工具就完成了!
6. 總結(jié) & 未來優(yōu)化方向
6.1 主要收獲
? 你學(xué)會(huì)了 如何用 Python 搭建本地 HTTP 服務(wù)器
? 你掌握了 二維碼的生成和自動(dòng)復(fù)制功能
? 你了解了 如何用 PyQt6 創(chuàng)建 GUI 界面
6.2 未來優(yōu)化
支持文件上傳:目前只支持下載,可以加上文件上傳功能
支持 HTTPS 加密:增強(qiáng)安全性,防止中間人攻擊
優(yōu)化界面美觀度:增加主題風(fēng)格、自定義端口等
到此這篇關(guān)于使用Python實(shí)現(xiàn)快速搭建本地HTTP服務(wù)器的文章就介紹到這了,更多相關(guān)Python本地HTTP服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方
本文主要介紹了Python?ModuleNotFoundError:?No?module?named?‘xxx‘可能的解決方案大全,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧Chat?Gpt<BR>2023-07-07Python的pytest測試框架中fixture的使用詳解
這篇文章主要介紹了pytest中fixture的使用詳解,pytest是一個(gè)非常成熟的全功能的Python測試框架,能夠支持簡單的單元測試和復(fù)雜的功能測試,還可以用來做selenium/appnium等自動(dòng)化測試、接口自動(dòng)化測試,需要的朋友可以參考下2023-07-07opencv-python圖像配準(zhǔn)(匹配和疊加)的實(shí)現(xiàn)
圖像配準(zhǔn)需是指對(duì)不同條件下得到的兩幅或多幅圖像進(jìn)行匹配、疊加的過程。本文詳細(xì)的介紹了如何使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06使用python和opencv的mask實(shí)現(xiàn)摳圖疊加
這篇文章主要介紹了使用python和opencv的mask實(shí)現(xiàn)摳圖疊加操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04OpenCV HSV顏色識(shí)別及HSV基本顏色分量范圍
這篇文章主要介紹了OpenCV HSV顏色識(shí)別及HSV基本顏色分量范圍,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03