当前位置: 首页 > news >正文

用 Python搭建一个微型的HTTP服务器用于传输 2024/11/9

使用内置的 http.server 模块,来搭建微型服务器。

快速启动服务器http.server --- HTTP 服务器Python 3.13.0 文档

声明:文章代码部分 由 ai 生成 

创建一个简单的文件共享服务器 进入 需要共享的目录 再打开cmd 输入以下代码

python -m http.server 8000

 打开服务器

设置主页 index.html

打开网页验证 

局域网的话这里要把英文改为 电脑ip地址 手机浏览器 才可以  访问!

关闭服务器只需要再当前cmd 界面Ctrl + C 按动即可关闭 

收到键盘中断,正在退出。 有可能失效,直接关闭当前cmd 窗口最直接!

查看所有端口占用情况:这里太多了不推荐用

在命令提示符窗口中,输入以下命令并按 Enter 键: netstat -ano

查找特定端口的占用情况:

假设你想查找端口 8080 的占用情况,可以输入以下命令:netstat -ano | findstr :8080

 

列出所有 Python 进程:

输入以下命令并按 Enter 键:tasklist | findstr python 


结束所有 Python 进程:

输入以下命令并按 Enter 键:taskkill /IM python.exe /F 


结束进程:PID 为 51276 的进程

输入以下命令并按 Enter 键:taskkill /PID 51276 /F


-m 选项用于将某个模块作为脚本运行。

具体来说,

-m 告诉 Python 解释器在标准库或第三方模块库中查找指定的模块,并执行该模块中的代码。


 为了简化操作我们写一个 简易脚本

  • 在编程语言中,REM常用于表示注释,特别是在BASIC语言中。

创建一个记事本 文件 填入以下代码

@echo off  
REM 关闭命令回显,使输出更干净 
python -m http.server 8000
REM 启动命令提示符 
start cmd 

 保存之后更改后缀名 为.bat

 双击执行 打开服务器!

 

 进阶功能,自定义文件上传处理,启动服务器并接受手机上传上来的文件!

这里直接放代码了,一共是三个文件

open.bat //快捷cmd

@echo off  
REM 关闭命令回显,使输出更干净 
python server.py
REM 启动命令提示符 
start cmd 

 server.py //主处理

import os 
from http.server import SimpleHTTPRequestHandler, HTTPServer 
import cgi # 自定义请求处理类
class MyRequestHandler(SimpleHTTPRequestHandler):# 处理GET请求def do_GET(self):if self.path == '/':# 响应200状态码self.send_response(200)# 设置响应头为text/htmlself.send_header('Content-type', 'text/html')self.end_headers()# 读取并发送upload.html文件内容with open('upload.html', 'rb') as file:self.wfile.write(file.read())else:# 调用父类方法处理其他路径的GET请求super().do_GET()# 处理POST请求def do_POST(self):if self.path == '/upload':# 解析表单数据form = cgi.FieldStorage(fp=self.rfile,headers=self.headers,environ={'REQUEST_METHOD': 'POST','CONTENT_TYPE': self.headers['Content-Type']})if 'file' in form:file_item = form['file']if file_item.filename:# 构建文件保存路径file_path = os.path.join('uploads', file_item.filename)# 将上传的文件保存到指定路径with open(file_path, 'wb') as f:f.write(file_item.file.read())# 响应200状态码self.send_response(200)# 设置响应头为text/htmlself.send_header('Content-type', 'text/html')self.end_headers()# 发送上传成功的消息self.wfile.write('文件上传成功'.encode('utf-8'))else:# 如果没有选择文件,返回400错误self.send_error(400, '未选择文件')else:# 如果缺少文件字段,返回400错误self.send_error(400, '缺少文件字段')else:# 如果路径不存在,返回404错误self.send_error(404, '未找到')# 主程序入口
if __name__ == '__main__':# 检查并创建上传目录if not os.path.exists('uploads'):os.makedirs('uploads')# 定义服务器端口号PORT = 8000 # 创建HTTP服务器with HTTPServer(('', PORT), MyRequestHandler) as httpd:print(f'服务器运行在端口 {PORT}')# 启动服务器,持续监听请求httpd.serve_forever()

upload.html //网页

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文件上传</title>
</head>
<body><h1>上传文件</h1><form action="/upload" method="post" enctype="multipart/form-data"><label for="file">选择要上传的文件:</label><input type="file" id="file" name="file" required><br><br><button type="submit">上传</button></form>
</body>
</html>

 上传效果


http://www.mrgr.cn/news/68877.html

相关文章:

  • 施耐德电气40GB数据失窃,遭黑客勒索
  • Python3.11.9下载和安装
  • <项目代码>YOLOv8 苹果腐烂识别<目标检测>
  • LeetCode22. 括号生成(2024冬季每日一题 2)
  • 配置github密匙
  • Android——从相机/相册获取图片
  • 985研一学习日记 - 2024.11.8
  • 寡头垄断模型
  • OpenEuler 下 Docker 安装、配置与测试实例
  • 【51蛋骗鸡按键控制流水速度快慢数码管显示;按键切换流水方向3则】2022-3-7
  • isc-dhcp-server
  • 经典双指针--合并升序链表
  • Linux基础
  • 闯关leetcode——3194. Minimum Average of Smallest and Largest Elements
  • c++17文件系统
  • 什么是 eCPRI,它对 5G 和 Open RAN 有何贡献?
  • 计算机毕业设计Python流量检测可视化 DDos攻击流量检测与可视化分析 SDN web渗透测试系统 网络安全 信息安全 大数据毕业设计
  • PyQt入门指南四十六 性能优化策略
  • Day 56 || 99.岛屿数量、100.岛屿的最大面积
  • 【鉴权】深入了解 Cookie:Web 开发中的客户端存储小数据
  • 计算机毕业设计Python+Neo4j中华古诗词可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析 PyTorch Tensorflow LSTM
  • RK3568平台开发系列讲解(设备树篇)设备树中CPU描述
  • //二维数组的遍历方式
  • pandas习题 054:将两个 DataFrame 导出到 Excel 的不同表
  • 【系统集成项目管理工程师】英语词汇对照表-项目管理类
  • Kubernetes 调度器调度策略的资源分配不均问题如何解决?