python学习之http客户端和服务端

news/2024/5/8 4:48:43/文章来源:https://blog.csdn.net/g0415shenw/article/details/130037410

Part1前言

python非常简洁,非常适合写小功能以及测试接口。本文主要记录用pyhon实现一个简单的http客户端和服务端。

6d56f34af4a21ccd3e20e7b713e2d7f0.png

Part2http客户端

这里采用request库来实现。示例如下

import requests
import json
url = 'http://127.0.0.1:81/test?key1=123&key2=456'headers = {'Authorization': 'cfe7mpr2fperuifn65g0','Content-Type': 'application/json',
}
payload = {}
payload["prompt"] = "prompt"
payload["model"] = "xl"
sendBody = json.dumps(payload)response = requests.post(url, headers=headers, data=sendBody)print(response.status_code)
print(response.content)

本示例实现了几个功能:
1、发送内容python对象转成json字符串,通过

sendBody = json.dumps(payload)

2、设置http的头内容,构建了一个headers对象
3、发送数据
4、处理应答数据

Part3http服务端

http服务端也是采用内置的http.server来实现,代码如下

from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import requests
from urllib.parse import urlparse, parse_qs
import reclass Router:def __init__(self):self.routes = {}def add_route(self, path, handler):self.routes[path] = handlerdef dispatch(self, path, method, handler):if method not in ('GET', 'POST'):handler.send_response(405)handler.send_header('Content-type', 'text/plain')handler.end_headers()handler.wfile.write(b'Method not allowed')returnfor route in self.routes:match = re.match(f'{route}(\?.*)?', path)if match:self.routes[route](handler)returnprint(f'error path = {path}')handler.send_response(404)handler.send_header('Content-type', 'text/plain')handler.end_headers()handler.wfile.write(b'Page not found')class MyHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self):self.route_request('GET')def do_POST(self):self.route_request('POST')def route_request(self, method):path = self.pathrouter.dispatch(path, method, self)def send_response(self, code):super().send_response(code)self.send_header('Access-Control-Allow-Origin', '*')def send_json_response(self, data):self.send_response(200)self.send_header('Content-type', 'application/json')self.end_headers()self.wfile.write(json.dumps(data).encode('utf-8'))def on_Test(handler):responseData = {"code": 0,"msg": "success"}# 解析请求的 URL,获取参数print(handler.path)# 获取请求头部信息headers = handler.headerscontent_type = headers.get('Content-Type', 'json')print(content_type)# 获取请求体信息content_length = int(handler.headers.get('Content-Length'))content = handler.rfile.read(content_length).decode('utf-8')print(content)query = urlparse(handler.path).queryparams = parse_qs(query)value1 = params.get('key1', '')value2 = params.get('key2', '')print(value1)print(value2)handler.send_json_response(responseData)router = Router()
router.add_route('/test', on_Test)httpd = HTTPServer(('localhost', 81), MyHTTPRequestHandler)
httpd.serve_forever()

本示例构建了一个路由类,这样可以非常方便的处理不同url的请求。我们只需要编写自己的处理函数即可。例如示例的处理函数是on_Test。
1、获取请求的url通过函数 print(handler.path)
2、获取头部信息,通过 handler.headers 对象获取
3、获取请求消息内容,通过

content = handler.rfile.read(content_length).decode('utf-8')

4、获取请求url中的参数,通过parse_qs来实现

params = parse_qs(query)value1 = params.get('key1', '')

5、发送应答我们进行了从新封装,在send_json_response函数中,设置应答code,以及设置http头和写入应答数据

def send_json_response(self, data):self.send_response(200)self.send_header('Content-type', 'application/json')self.end_headers()self.wfile.write(json.dumps(data).encode('utf-8'))

Part4总结

本文主要写了一个基于Python得最简单的http的客户端和http的服务端。

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

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

相关文章

代码不熟没关系,让AI替你写

程序员早已不是一个陌生的群体,但程序、代码相对普通人而言,看着还是比较深奥难懂,但自从有了ChatGPT,不少对此有兴趣的外行人士,也能轻松写出代码了,比如让ChatGPT写一个贪吃蛇游戏,按它给出的…

【如何使用Arduino控制WS2812B可单独寻址的LED】

【如何使用Arduino控制WS2812B可单独寻址的LED】 1. 概述2. WS2812B 发光二极管的工作原理3. Arduino 和 WS2812B LED 示例3.1 例 13.2 例 24. 使用 WS2812B LED 的交互式 LED 咖啡桌4.1 原理图4.2 源代码在本教程中,我们将学习如何使用 Arduino 控制可单独寻址的 RGB LED 或 …

ROS实践05 订阅方实现Python

文章目录运行环境:思路:1.1 Python代码实现1)工作空间创建和编译2)功能包创建和添加依赖3)新建.py文件4)修改CMakeList5)运行节点运行环境: ubuntu20.04 noetic 宏基暗影骑士笔记本…

Java每日一练(20230409)

目录 1. 多数元素 🌟 2. 反转链表 II 🌟🌟 3. 日期之间的遍历 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 多数元素 给定一个…

使用红黑树封装map和set

目录 一、set和map的底层结构 使用模板区分map和set 使用仿函数来比较大小 二、红黑树中set和map的迭代器 end和begin迭代器 operator迭代器 operator-- 三、set与map中的迭代器和const迭代器 四、迭代器的拷贝构造 五、完整代码 set.h map.h RBTree.h 一、set和ma…

UE4 C++编写自定义动画蓝图节点

UE中自带的动画蓝图节点有限,在实现一些功能时需要通过C编写一些自定义的动画蓝图节点,本文就来讲解其基础实现,自定义节点最终效果如下: 源文件下载:https://download.csdn.net/download/grayrail/87654290 1.流程简…

linux 服务器 docker 安装 mysql 8.0.32 常用命令

我的Docker专栏 https://blog.csdn.net/weixin_45580378/category_12276045.html docker 镜像 https://registry.hub.docker.com/_/mysql/tags 1.版本号可不写 不写就是最新版本 最好写上 docker pull mysql:版本号2.查看镜像是否安装成功 如下图 docker images3.创建文件…

活动送票福利|Jina AI x PyCon US 2023!

作为一家总部位于德国柏林的国际化公司,Jina AI 拥有来自 10 不同国家的团队成员,在中国(北京、深圳)、美国(圣何塞)均设有办公室。全球化基因深植于 Jina AI 团队,我们也非常注重国际化社区的建…

shardingsphere-jdbc 整合 springboot

shardingsphere官网地址 https://shardingsphere.apache.org/document/5.2.0/cn/user-manual/shardingsphere-jdbc/spring-boot-starter/rules/sharding/ 当前我们演示的是水平分表 1、基础环境配置以及依赖管理 1.1 创建数据库表结构 CREATE TABLE address_0 (id bigint(…

linux 服务器 docker 安装 jdk jre java 1.8 环境 常用命令

我的Docker专栏 https://blog.csdn.net/weixin_45580378/category_12276045.html docker jdk 镜像 https://hub.docker.com/_/java/tags 1.下载JDK镜像 注:后面如果不写版本的话 就是最新版 建议写上 docker pull java:8u111-jdk2.查看镜像是否下载成功 docker…

家装产业的数字化,正在成为越来越多人的新共识

一场数字化的浪潮,正在各行各业上演着。家装行业,亦不例外。可以说,家装产业的数字化,正在成为越来越多人的新共识。如何借助数字化的手段改造家装行业,如何乘着数字化的东风实现家装行业的全面转型升级,正…

CF区间DP作业题解

1. Recovering BST 由于互质关系不是传递的,所以尽量挂在树的最下面,刚好构成二叉树 f[i][j][0]f[i][j][0]f[i][j][0] 表示区间 [i,j][i,j][i,j] 以 iii 为根,是否可以构成一棵树。 f[i][j][1]f[i][j][1]f[i][j][1] 表示区间 [i,j][i,j][i,j…

基于非线性权重因子和纵横交叉策略的麻雀搜索算法

目录 1 主要内容 非惯性权重模型 纵横交叉策略模型 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序参考文献《基于Sobol序列和纵横交叉策略的麻雀搜索算法》对麻雀搜索算法进行改进,实现了基于纵横交叉策略和非线性权重因子的麻雀搜索算法 改进SSA算法【…

webpack配置本地TypeScript编译环境和开启本地服务

目录 1.创建一个文件夹 2.初始化一个package.json文件对我们安装包进行记录 3.安装webpack 4.配置webpack.config.js文件 1.创建一个文件夹 2.初始化一个package.json文件对我们安装包进行记录 执行npm init,文件命名为ts_demo,然后一直回车。 3.安装…

ImageIO 支持webp格式

TwelveMonkeys 提供了很多图片格式的支持,其中也包括了webp,但是其仅支持webp格式的读取,不支持webp格式的写出,这样的话如果想把图片转换成webp格式的图片就没办法实现了;下面我们使用 webp-imageio-core 对ImageIO图…

关键词采集工具可以帮助我们做那些方面的工作

针对搜索引擎的关键词采集工具可以帮助我们做那些方面的工作,至少从10个工作场景说明,并列举详细的使用场景 Msray-plus,是一款企业级综合性爬虫/采集软件。 支持亿级数据存储、导入、重复判断等。无需使用复杂的命令,提供本地W…

ROS实践01 C++ Python基本实现

文章目录运行环境:1.1 vscode 环境配置:1)ctrlshiftX 添加扩展插件:2)ctrlshiftB 配置中更换为以下代码1.2 C代码实现1)工作空间创建和编译2)功能包创建和添加依赖3)新建.cpp文件4&a…

新电脑装机——配置硬件、软件安装卸载、注册表、路径——介绍详解

装机工具、配置、路径,介绍详解电脑配置信息电脑历史记录黑色Window Top 加入黑色(微信不能调成黑色背景)edge浏览器的配置(被edge恶心过的必看,有方法解决edge被管理、不能新建标签)设置【地址栏搜索】&am…

多元函数的基本概念——“高等数学”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是多元函数的基本概念,下面,让我们一起进入多元函数的世界吧 平面点集 多元函数的概念 多元函数的极限 多元函数的连续性 有界闭区域上多元连续函数的性质 平面点集 第一个是坐标平…

RocketMQ 事务消息 详解

🍊 Java学习:Java从入门到精通总结 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年4月9日 &#x1…