Python:单线程HTTP服务端_方法封装版

Python脚本快速封装为标准化Skill:HTTP API、CLI与事件驱动实战 在自动化流程与系统集成领域,将功能模块封装为可复用的标准化服务单元是提升协作效率的关键。其核心原理在于通过定义清晰的接口契约与通信协议,将离散的脚本逻辑转化为可被统一调用的能力组件。这一过程的技术价值在于打通脚本能力的“最后一公里”,使其从本地命令行环境解放出来,成为支持远程调用、事件触发或流水线集成的生产级服务。典型的应用场景包括为数据清洗、API调用或定时任务脚本提供HTTP端点供前端或微服务调用,或将其封装为带结构化输出的命令行工具以便集成到CI/CD流水线。本文聚焦于Python脚本,详细解析如何通 阅读详情

最简单最原始的HTTP版本.

已经去掉注释,如果需要注释我上传注释版.

import socket,re,time


def open_file(路径):
    try:
        client_html_data=open('python_demo/HTTP协议/'+路径,'rb')
    except Exception as  ret:   
        return '404错误 页面不存在,请重新输入地址'.encode('gbk')
    else: 
        html_read_data=client_html_data.read()
        client_html_data.close()
        return html_read_data


def service_client(client_socket,recv_data):
    print('客户端发送的请求内容:')
    print('-'*50)
    print(recv_data)
    print('-'*50)
    ret_filename_=re.search(r'\w+\.html|favicon.ico',recv_data) 
    if ret_filename_: 
        file_name=ret_filename_.group()
        file_data=open_file(file_name) 
        html_header='HTTP/1.1 200 OK\r\n'   
        html_header+='Content-length:%d\r\n\r\n'%len(file_data) 
        client_socket.send(html_header.encode('gbk'))
        client_socket.send(file_data) 
    else: 
        file_data=open_file('index.html')   
        html_header='HTTP/1.1 200 OK\r\n'   
        html_header+='Content-length:%d\r\n\r\n'%len(file_data) 
        client_socket.send(html_header.encode('gbk'))
        client_socket.send(file_data) 


def main():
    ''' 主线程 '''
    tcp_socket_sever=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_socket_sever.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)      
    tcp_socket_sever.bind(('127.0.0.1',8001))
    tcp_socket_sever.listen(128)
    tcp_socket_sever.setblocking(False) 
    print('服务端已运行---------------------------------------')
    client_socket_list=list()
    while True:
        time.sleep(1)
        try:
            new_client_socket,clientAddr=tcp_socket_sever.accept() 
        except Exception as ret:  
            print('客户端链接个数:',len(client_socket_list))
            print('等待新客户端链接------------')
        else: 
            new_client_socket.setblocking(False) 
            client_socket_list.append(new_client_socket) 
        for client_socket in client_socket_list:  
            try:
                recv_data=client_socket.recv(10240).decode('gbk') 
            except Exception as  ret:   
                print('列表中对象有: ',client_socket)
            else: 
                if recv_data : 
                    service_client(client_socket,recv_data) 
                else: 
                    client_socket_list.remove(client_socket)
                    client_socket.close()
    tcp_socket_sever.close() 


if __name__ == '__main__':
    main()

 

Python内置HTTP服务器:零依赖搭建HTTPS文件服务 HTTP服务器是Web通信的基础组件,其核心原理在于基于Socket实现HTTP/1.1协议解析与响应生成。Python标准库中的http.server模块提供了轻量、透明、无第三方依赖的实现方案,天然支持SSL/TLS加密,仅需自签名证书即可启用HTTPS,规避了Nginx或Apache等工业级服务器的复杂配置与环境陷阱。该方案技术价值突出体现在环境验证能力——能成功运行即证明Python解释器、SSL模块及基础网络栈全部就绪,成为新手排查python安装教程、vscode配置python环境等问题的黄金 阅读详情

相关推荐

python用单进程单线程非堵塞实现长链接http服务器

python用单进程单线程非堵塞实现长链接http服务器 其中需要注意的是非堵塞的设置方式

python -- requests库封装

requests是基于Python开发的HTTP 库,requests是在urllib的基础上进行了高度的封装,它不仅继承了urllib的所有特性,而且还支持一些其它的特性,比如使用Cookie保持会话、自动确定响应内容的编码等,可以轻而易举地完成浏览器的任何操作。用的比较多的类有:🎈 requests.Request:用于请求发送到服务器🎈 requests.Response:服务器对HTTP请求的响应,可以返回响应码、请求头、请求url,JSON格式的结果等。

qq_42873925的博客 1104

Python实现简单http服务器

写一个python脚本,实现简单的http服务器功能: 1.浏览器中输入网站地址:172.20.52.163:20014 2.server接到浏览器的请求后,读取本地的index.html文件的内容,回发给浏览器 代码实现 server.py #!/usr/bin/python import socket import signal import errno from time import sleep def HttpResponse(header,whtml): f = file(whtml) contxtlist = f.readlines() context = ''

Python 同、异步HTTP客户端封装:性能与简洁性的较量

在中,我们谈到在Python中利用基于类的描述器(descriptor)和函数修饰器(decorator),可以实现针对对象属性访问的拦截操作。那么我们很容易想到,既然可以拦截对属性的访问操作,那么也就一定能够实现针对属性的编辑操作的拦截。这个代码对于认真看了上篇文章的同学来说难度应该不大,因此这里我仅作简单的分析。为了实现对属性编辑操作的拦截,我这里在描述器类my_property中定义了setter和__set__这两个方法。setter负责接收实际实现属性编辑操作的函数fset。

白帽阿叁的博客 442

[附源码]计算机毕业设计Python财务管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程项目运行环境配置:Pychram社区版+py项目技术:django + python+ Vue 等等组成,B/S模式 +pychram管理等等。环境需要1.运行环境:最好是python3.7.7,我们在这个版本上开发的。其他版本理论上也可以。2.pycharm环境:pycharm都可以。推荐pycharm社区版;3.mysql环境:建议是用5.7版本均可。

巧灵计算机程序设计 1068

银河麒麟V10 SP3系统下如何安全安装gcc-toolset-10(附yum仓库避坑指南)

本文详细介绍了在银河麒麟V10 SP3系统中安全部署gcc-toolset-10的完整方案。核心在于通过配置默认禁用的yum仓库(如EPKL仓库)并配合--enablerepo参数进行精准安装,有效规避依赖冲突风险,实现与系统默认GCC 7.3的稳定共存。文章还提供了多版本环境切换、系统维护及故障排查的实用指南,确保操作的可控与可逆。

h0i1j2k3l的博客 590

python网络基础之单进程单线程实现非堵塞的http服务器

用单进程/单线程我们可以实现一个返回网页页面的http服务器,其中主要的是把堵塞变为非堵塞 套接字.setblocking(False),来实现一个长连接 import socket import re import time def main(): # 创建套接字 socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_S...

yilv12123的博客 431

SpringBoot+Vue企业级开源聚合支付系统!支持30+款支付平台,只需配置商户证书就能直接使用!

一款开源SAAS支付系统推荐

技术Z先生的博客 2721

python_记录问题HTTP请求的封装

1.

qq_48848705的博客 501

sap2000 api matlab,SAP2000_API入门指南.pdf

SAP2000_API入门指南北 京 金 土 木 软 件 技 术 有 限 公 司Beijing Civil King Software TechnologyCo., Ltd.SAP2000 API 入门指南余承飞 韦群跃 汤娣概述SAP2000 API 是从 SAP2000 V11 开始引进的,即应用软件编程接口。用户可以编写程序,通过API 随心所欲地调用 SAP2000...

weixin_42118423的博客 1945

QT日志输出终极指南:从qDebug到qFatal的完整文件记录方案

本文深入探讨了QT日志系统的企业级文件记录方案,从基础的qDebug、qWarning、qCritical、qFatal等宏的使用,到构建自定义消息处理器、实现异步写入、分级存储、日志轮转及性能监控等高级功能。旨在帮助开发者构建一个稳定、高效且易于维护的专业级日志管理架构,适用于桌面应用、嵌入式系统及服务端程序。

ik678901234的博客 909

Python:单线程非堵塞实现HTTP服务端_方法封装版

利用非堵塞来提高资源利用率. 可以尽量服务多个客户端,防止浪费资源等待客户端. 已去注释,需要可以上传注释版 import socket,re,time def open_file(路径): try: client_html_data=open('python_demo/HTTP协议/'+路径,'rb') except Exception as ret...

include_ice的博客 281

在F1C100s上跑GBA游戏:手把手教你用Buildroot配置SDL和移植gpsp模拟器

本文详细介绍了在全志F1C100s开发板上配置Buildroot、移植SDL库和gpsp模拟器的完整流程,帮助开发者实现在ARM9平台上流畅运行GBA游戏。内容涵盖环境配置、交叉编译、常见问题解决及性能优化技巧,特别针对'段错误'和'无声音'等典型问题提供实用解决方案。

weixin_42566424的博客 398

python 单线程_python单线程解决并发

1.单线程解决并发方式一import socketimport select# 百度创建连接:非阻塞client1 = socket.socket()client1.setblocking(False)try:client1.connect(('www.baidu.com', 80))except BlockingIOError as e:pass# 搜狗创建连接:非阻塞client2 = soc...

weixin_39649660的博客 181

LoRa双端通信稳定性核心:同步字配置与LLCC68工程实践

LoRa是一种基于扩频调制的远距离低功耗无线通信技术,其物理层鲁棒性依赖于发射端与接收端在频率、带宽、扩频因子及同步字等关键参数上的严格一致。同步字作为LoRa帧结构中位于前导码之后的2字节标识字段,承担着物理层帧过滤与网络隔离的核心作用,直接影响通信成功率与抗干扰能力。在实际嵌入式开发中,尤其采用LLCC68等专用射频芯片时,同步字配置错误或双端不一致是导致‘能发不能收’‘间歇性丢包’等典型问题的首要原因。本文面向STM32等Cortex-M平台开发者,结合硬件一致性约束、驱动移植方法论与寄存器级调试手段

weixin_36019375的博客 131

【银河麒麟桌面系统】安装英伟达(NVIDIA)显卡驱动

本文详细介绍了在麒麟桌面操作系统V10 SP1(版本号2503)上安装NVIDIA RTX 5060显卡驱动的完整流程。主要内容包括:查看系统版本信息,从NVIDIA官网下载Linux 64位驱动,授予执行权限后运行安装程序,处理安装过程中的X server警告、32位库安装、DKMS模块选择等问题,以及安装完成后如何验证驱动状态。同时提供了卸载驱动的步骤和常见问题解决方案,如处理X server警告、libglvnd EGL依赖问题等。该指南适用于需要在国产麒麟系统上安装NVIDIA显卡驱动的用户,包含完

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 6314

Radamsa Python 封装的并发调用方法

Radamsa Python 封装的并发调用方法。

Karl_Schwarzschild的小窝 180

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python实现多进程与多线程HTTP服务器,浏览器通过HTTP与之通信3

因为网络间通信是基于TCP协议传输数据的,而服务器与浏览器之间通信是基于HTTP协议的,那么下面基于python实现一个多进程或多线程tcp服务器,浏览器可以基于http协议进行发送请求和解析。浏览器展示返回的一个标准的HTML网页,此外实现服务器解析客户端多次请求并且返回请求结果。即:客户端根据HTML里面的各种链接,再发送HTTP请求给服务器,拿到相应的图片、视频、Flash、...

涤生大数据 4445

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python http.server 模块:构建 HTTP 服务器的全面指南

模块提供了实现 HTTP 服务器的类和工具。它允许开发者快速搭建一个 HTTP 服务器,处理客户端的 HTTP 请求,并返回相应的响应。该模块支持常见的 HTTP 方法,如 GET、POST 等,并且可以对不同的请求路径和请求方法进行定制化处理。开发者可以通过继承类,并重写相应的方法来实现自定义的请求处理逻辑。print(f"自定义服务器启动,监听端口。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 2968

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

llama.cpp 服务化部署方案对比:从 llama-server 到自定义 HTTP 封装的架构选择

Json,/// llama.cpp 的 C API 声明////// 为什么用手写 FFI 而非 bindgen:/// 实际需要的 API 函数不超过 15 个,bindgen 生成数千行绑定代码/// 手工声明更可控,且可以添加 Rust 侧的安全包装) -> c_int;/// 推理请求的内部表示/// 为什么用 oneshot 而非共享状态返回结果:/// 推理结果是单个值(token id),符合请求-响应模式。

2301_81410839的博客 7404

Python HTTP服务器底层实现:从Socket到GET/POST请求处理

HTTP协议是Web通信的基石,它定义了客户端与服务器之间请求与响应的标准格式。其工作原理基于TCP连接,通过请求行、头部和正文构成报文,实现资源的获取与提交。理解HTTP底层机制对于Web开发、性能优化和网络编程至关重要,能帮助开发者深入掌握框架原理并处理定制化场景。本文聚焦于使用Python标准库手动实现HTTP服务器,核心内容包括通过socket监听处理网络连接、解析HTTP/1.1协议规范,并重点实现GET与POST请求的完整处理流程。通过实践请求解析、路由分发、响应构建及表单数据处理等关键环节,读

weixin_30571465的博客 493

Python量化开发:如何给金融行情API写一个优雅的“多线程并发、限流重试”二次封装?

本文介绍如何为量化交易系统封装可靠的金融行情API客户端。针对生产环境中常见的网络抖动、限流和效率问题,提出基于Python的解决方案:1. 使用装饰器实现指数退避重试机制;2. 采用ThreadPoolExecutor实现多线程并发请求;3. 内置频率限制保护。文章详细展示了ReliableQuantClient类的实现代码,包含安全获取K线和实时行情的方法,以及支持批量下载的BatchDataDownloader类。通过实际测试验证了方案的有效性,并提供了线程安全、QPS控制等注意事项。

weixin_45515140的博客 867

python 异步IO-aiohttp与简单的异步HTTP客户端/服务器

参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320981492785ba33cc96c524223b2ea4e444077708d000 asyncio和Python的异步HTTP客户端/服务器:https://docs.aiohttp.org/en/la...

weixin_34332905的博客 226

Python单行命令背后的魔法:解构http.server模块工作机制

本文深入解析Python中`http.server`模块的工作机制,从单行命令`python -m http.server`出发,详细剖析了其背后的Socket监听、请求解析与响应生成流程。文章揭示了该模块如何通过TCPServer继承体系实现HTTP服务,并探讨了其在安全性与性能上的平衡设计,是理解Python网络编程的绝佳案例。

weixin_29231263的博客 379

Python生产级HTTP服务与客户端实现:从超时重试到可观测性

HTTP服务与客户端是分布式系统的基础通信单元,其稳定性直接取决于连接管理、超时控制、错误重试和日志可观测性等底层机制。Python标准库结合urllib3可提供细粒度网络控制能力,避免高层框架封装带来的调试盲区;通过分级超时(connect/read)、三级重试(连接级/请求级/业务级)和结构化日志,能显著提升服务在弱网、高并发、下游抖动等真实场景下的鲁棒性。本文聚焦Python服务端(http.server)与客户端(urllib3)的最小可行实现,覆盖优雅关闭、健康检查、连接池复用、异常分类与监控埋点

weixin_33834910的博客 424

python网络爬虫——单线程+异步协程

-在python3.4之后新增了asyncio模块,可以帮我们检测IO(只能是网络IO【HTTP连接就是网络IO操作】),实现应用程序级别的切换(异步IO)。注意:asyncio只能发tcp级别的请求,不能发http协议。   - 异步IO:所谓「异步 IO」,就是你发起一个 网络IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知。   - 实现方式:单线程...

317
上一篇: Python:epoll单线程实现HTTP服务端
下一篇: Python:单线程非堵塞实现HTTP服务端_方法封装版
include_ice
博客等级 码龄9年 307粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值