用 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/html
            self.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/html
                    self.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>

 上传效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/911769.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机linux7.9下安装mysql

1.MySQL官网下载安装包&#xff1a; MySQL :: Download MySQL Community Server https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 2.解压文件&#xff1a; #tar xvzf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 3.移动文件&#…

Turtlebot3 buger 硬件与操作平台详细介绍

引言 TurtleBot3 有三个版本&#xff0c;分别是紧凑型的 Burger、功能更强的 Waffle和性能提升的 Waffle Pi&#xff0c;分别适用于不同的应用需求。使用 Raspberry Pi 作为主控单板计算机&#xff08;SBC&#xff09;&#xff0c;而 Waffle Pi 可以使用更强大的 NVIDIA Jetson…

LabVIEW导入并显示CAD DXF文件图形 程序见附件

LabVIEW导入并显示CAD DXF文件图形 程序见附件 LabVIEW导入并显示CAD DXF文件图形 程序见附件 - 北京瀚文网星科技有限公司 LabVIEW广泛应用于自动化、数据采集、图形显示等领域。对于涉及CAD图形的应用&#xff0c;LabVIEW也提供了一些方法来导入和显示CAD DXF文件&#x…

北斗智能定位平板终端|三防平板|北斗有源终端|北斗搜救终端

在当今快速发展的科技时代&#xff0c;智能设备的应用已经渗透到我们生活的方方面面&#xff0c;从日常娱乐到专业工作&#xff0c;无一不彰显着科技的魅力。特别是在高精度定位领域&#xff0c;随着全球卫星导航系统&#xff08;GNSS&#xff09;技术的不断进步&#xff0c;智…

40.第二阶段x86游戏实战2-初识lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

华为ENSP--ISIS路由协议

项目背景 为了确保资源共享、办公自动化和节省人力成本&#xff0c;公司E申请两条专线将深圳总部和广州、北京两家分公司网络连接起来。公司原来运行OSFP路由协议&#xff0c;现打算迁移到IS-IS路由协议&#xff0c;张同学正在该公司实习&#xff0c;为了提高实际工作的准确性和…

【Hadoop实训】Flume系统负载均衡测试

一、搭建并配置Flume机器 在master上&#xff0c;执行&#xff1a; scp -r /export/servers/flume slave1:/export/servers/scp -r /export/servers/flume slave2:/export/servers/scp /etc/profile slave1:/etc/profilescp /etc/profile slave2:/etc/profile 执行完上述指令后…

Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)

前言&#xff1a;多线程编程已经广泛开始使用&#xff0c;其可以充分利用系统资源来提升效率&#xff0c;但是线程安全问题也随之出现&#xff0c;它直接影响了程序的正确性和稳定性&#xff0c;需要对其进行深入的理解与解决。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解…

2024 CSS保姆级教程二 - BFC详解

前言 - CSS中的文档流 在介绍BFC之前&#xff0c;需要先给大家介绍一下文档流。​ 我们常说的文档流其实分为定位流、浮动流、普通流三种。​ ​ 1. 绝对定位(Absolute positioning)​ 如果元素的属性 position 为 absolute 或 fixed&#xff0c;它就是一个绝对定位元素。​ 在…

在 Spring Boot 中实时监控 Redis 命令流

前言 在 Redis 的日常使用和调试中&#xff0c;监控命令流有助于我们更好地理解 Redis 的工作状态。Redis 提供了 MONITOR 命令&#xff0c;可以实时输出 Redis 中所有客户端的命令请求&#xff0c;这一功能在调试和分析性能时非常有帮助。在 Spring Boot 项目中&#xff0c;我…

ReadKidz | 一个生成儿童故事绘本的平台

AI创作丨使用ReadKidz快速生成儿童故事绘本 ReadKidz 是一款AI平台&#xff0c;专为快速创作儿童故事绘本而设计。用户仅需输入简单提示词并根据喜好进行选择&#xff0c;便能生成精美的个性化绘本&#xff0c;适合家长、教师或创作者为孩子们创建有趣且富教育意义的故事。 使用…

aosp15系统窗口闪屏原生bug-dim图层相关-你会修改吗?

背景 近期各个大厂已经开始准备aosp15的系统rom适配工作了&#xff0c;应该是想2025年初开发发布相关的新机型&#xff0c;所以慢慢的我们也要开始适应aosp15版本的相关问题的修改和研究哈。 近期就有相关学员朋友在做android15相关的dialog开发时候&#xff0c;发现了一个严…

UML统一建模语言,学习笔记

目录 一、UML 的概述 二、UML 的主要图形类型 1. 类图 2. 对象图 3. 用例图 4. 序列图 5. 协作图 6. 状态图 7. 活动图 三、UML 的关系 1. 继承 2. 实现 3. 关联 4. 聚合 5. 组合 四、UML 的应用场景 1. 软件设计系统 2. 需求分析 3. 项目文档化 4. 团队协…

133.鸿蒙基础01

鸿蒙基础 1.自定义构建函数1. 构建函数-[Builder ](/Builder )2. 构建函数-传参传递(单向)3. 构建函数-传递参数(双向)4. 构建函数-传递参数练习5. 构建函数-[BuilderParam ](/BuilderParam ) 传递UI 2.组件状态共享1. 状态共享-父子单向2. 状态共享-父子双向3. 状态共享-后代组…

uniapp组件样式运行至小程序失效

文章目录 一、uniapp样式穿透打包运行至微信小程序失效 一、uniapp样式穿透打包运行至微信小程序失效 组件样式隔离文章参考 解决方案 options: {styleIsolation: "shared",},这个配置项改变了小程序组件的样式隔离模式&#xff0c;使得组件的样式能够共享和继承。…

在服务器里安装2个conda

1、安装新的conda 下载地址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 本文选择&#xff1a;Anaconda3-2023.03-1-Linux-x86_64.sh 安装&#xff1a;Ubuntu安装Anaconda详细步骤&#xff08;Ubuntu22.04.1&#xff…

软考系统分析师知识点三七:今日考试

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间&#xff1a;11月9日。 今日考试。 今日考试 上午&#xff1a;选择题、案例题&#xff0c;注意记一下选择题和案例题中出现的知识点。 中午&#xff1a;再次整理强记一下论文框架、论文知识点 下午&…

通过 Windows IIS 服务访问腾讯云 CFS 文件系统

互联网信息服务&#xff08;IIS&#xff09;可以像访问本地数据一样访问文件存储&#xff08;Cloud File Storage&#xff0c;CFS&#xff09;系统上的数据&#xff0c;并提供 Web 服务&#xff0c;实现网站存储与计算分离。本文介绍如何配置 IIS 访问 CFS 文件系统。 背景信息…

鸿蒙的进击之路

1. 题记&#xff1a; 为什么要写鸿蒙&#xff0c;因为她是华为的&#xff0c;为什么是华为就要写&#xff0c;因为华为背负了国人太多太多的包袱&#xff0c;或点赞或抨击。 我是强烈支持华为的&#xff0c;但我会客观公正地去评价华为的产品&#xff0c;就比如这篇博文&#…

【java】哈希<两数之和> 理解哈希

两数之和 题目描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你…