[Python http.server] 搭建http服务器用于下载/上传文件
创始人
2024-11-17 09:34:52
0

动机:笔者需测试bs架构下的文件上传与下载性能,故想通过Python搭建http服务器并实现客户端与服务器之间的文件上传和下载需求

难点:这应该是很基础的东西,不过笔者之前未接触过http编程,谨在此记录下学习的过程,可能不是最优解

方法:在服务器端部署html页面,并执行监听的Python代码,在客户端操作实现文件的上传与下载

1 [服务端] 创建本地文件夹用于开启http服务

首先开启power shell,在服务端本地创建一个文件夹用于开启http服务,例如创建了一个E:\WebServer文件夹,如图所示:

 进入power shell,输入命令:

cd E:\WebServer

输入开启http指令:

python -m http.server

出现如下情况,说明成功:

 此时,我们便可以在服务器的浏览器地址栏输入本机ip地址+端口号来访问http页面,例如:

http://172.1.1.1:8000

 至于本机ip地址,可以从右键“网络”,点击你的网络连接的蓝字,详细信息里面的ipv4地址进行查看,如图所示:

 此时,浏览器中的页面应该是这样:

看见这个页面,第一步就完成了!


2 [服务端] 编写监听脚本,用于客户端上传文件

在服务器端根文件夹下创建一个Python脚本(在别的地方创建应该也行,没试过):

from http.server import BaseHTTPRequestHandler, HTTPServer import time   # 创建自定义的请求处理类 class FileUploadHandler(BaseHTTPRequestHandler):     def do_POST(self):         start_time = time.time()         content_length = int(self.headers['Content-Length'])         # 读取客户端发送的二进制文件数据         file_data = self.rfile.read(content_length)          # 在这里可以对接收到的文件数据进行处理,例如保存到磁盘         with open('uploaded_file.bin', 'wb') as file:             file.write(file_data)          self.send_response(200)         self.end_headers()         self.wfile.write(b'File uploaded successfully.')          end_time = time.time()         time_elapsed_ms = int((end_time - start_time) * 1000)         print(f"Update in {time_elapsed_ms} ms")   # 启动服务器 def run_server():     server_address = ('your web server', 8000)  # 可以根据需要修改端口号     httpd = HTTPServer(server_address, FileUploadHandler)     print('Server running on port 8000...')     httpd.serve_forever()   # 运行服务器 run_server() 

注意,在 ‘your web server’ 处输入自己的ip地址


3 [服务端] 编写html脚本,用于显示上传文件界面

                           

上述代码参考了:python HTTPServer 实现文件上传下载_xiekch的博客-CSDN博客  

将上述代码写入到记事本文件,再保存成html文件,放入服务器根目录,并命名为index.html

http页面便会更改成既定样式,即此时再次打开http页面,应该呈现:


4 [客户端] 编写上传文件脚本

使用另一台电脑充当客户端,编写上传文件的Python脚本:

import requests import os  # 指定服务器URL和要上传的文件路径 server_url = 'http://your web server:8000/upload' file_path = '/your file path/file.bin'  testResponse = requests.get(server_url) if testResponse.status_code == 200:     print("与服务器的连接正常!") else:     print("无法连接到服务器!")  with open(file_path, 'rb') as file:     file_data = file.read()  response = requests.post(server_url, files={'file': 'file'})  if response.status_code == 200:     print("文件上传成功!") else:     print("文件上传失败!")

同样注意,在 ‘your web server’ 处输入自己的ip地址,在your file path写上文件路径

Windows系统下,文件路径可以使用双斜杠:

http://172.1.1.1:8000//data.bin

 MacOS系统下,目前测试可以使用如下格式:

'/users/north/desktop/data.bin'

5 [客户端] 编写下载文件脚本

同样的,使用另一个Python文件编写下载文件脚本:

import time import requests  response = requests.get("http://your web server:8000//file.bin") with open("data.bin", "wb") as f: f.write(response.content)

再次,在 ‘your web server’ 处输入自己的ip地址


6 [客户端] 实现效果

上述步骤都准备充分后,运行 [服务端] 监听脚本,此时Python IDE的Terminal窗口应提示:

同时,脚本应处于一直运行状态(当前显示停止键则为正在持续运行),以持续监听:

 此时运行[客户端]的下载文件脚本,可将服务器中的目标文件进行下载,笔者又另行编写了一个记录下载时间的功能,出现下述结果说明下载成功,当然,也可以用类似于上传问价脚本的判断机制进行文件是否下载成功的判断

[客户端]进入服务器的http地址,选择本地文件进行上传:

同样的,[服务器]监听终端出现如下消息说明上传成功:

 [服务器]根目录会出现暂存文件,后续若需要进一步对该暂存文件进行处理则可以进一步修改脚本

230524修订:需要在运行服务端监听脚本前就在客户端进入上传文件页面,否则会产生Error,因暂不影响功能实现,目前尚未研究成因 


The End

相关内容

热门资讯

玩家攻略,牛牛房卡制作链接生肖... 您好!微信生肖系列/新大圣大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(生肖系列/新...
一分钟了解!牛牛房卡游戏平台加... 新荣耀/飞鹰互娱房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...
正版授权“在哪里买炸金花房卡哪... 炫酷大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来...
重大通报,牛牛房卡怎么获得九哥... 重大通报,牛牛房卡怎么获得九哥联盟/微信链接房卡购买渠道九哥联盟是一款非常受欢迎的游戏,咨询房/卡添...
一分钟了解!微信金花房卡怎么弄... 您好!微信芝麻大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(芝麻大厅)大厅介绍:...
秒懂教程“可以开房炸金花微信房... 新西游牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡...
科技实测!游戏微信牛牛房卡玄武... 微信游戏中心:玄武大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
ia攻略/牛牛房卡制作链接卡卡... 卡卡娱乐是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
给大家讲解“金花房卡微信链接怎... 新全游牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
推荐一款!金花房卡制作链接烛龙... 今 日消息,烛龙大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
头条推荐!牛牛房卡游戏平台加盟... 光明联盟是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
一分钟了解!牛牛房卡游戏平台加... 您好!微信荣耀乐娱大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(荣耀乐娱)大厅介绍:...
正版授权“可以一起创房的牛牛,... 美猴王牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
ia攻略/金花房卡专卖店新众亿... 今 日消息,新众亿/皇豪互娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更...
重大通报,牛牛房卡制作链接战皇... 战皇大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
重大通报,牛牛房卡官网新大海/... 微信游戏中心:新大海房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程序...
头条推荐!金花房卡制作链接趣游... 趣游联盟是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
ia攻略/牛牛房卡批发平台新老... 您好!微信新老夫子大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(新老夫子)大厅介绍:...
ia实测“怎样创建微信金花链接... 新西游牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
一分钟了解!金花充值房卡火狐大... 火狐大厅/新超圣房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...