基于华为云 ModelArts 的在线服务应用开发(Requests 模块)
一、本节目标
- 了解并掌握 Requests 模块的特点与用法
- 学会通过 Python+Requests 访问华为云 ModelArts 在线推理服务
- 熟悉 JSON 模块在 Python 中的数据序列化与反序列化
- 掌握 Python 文件 I/O 的基本操作
- 演示一个基于华为云 ModelArts + PyQt 的花卉分类桌面应用案例
二、Requests 模块简介与特点
-  简介 -  requests是 Python 第三方库,用于发送 HTTP/HTTPS 请求
-  安装命令: pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
 
-  
-  主要特点 - 简单易用:人性化 API,几行代码即可完成请求
- 支持 HTTPS:自动验证 SSL 证书
- 支持 Cookies:自动管理会话状态
- 支持文件上传:files参数上传本地文件
- 支持会话管理:requests.Session()跨请求保持连接和 Cookie
 
三、HTTP 协议基础
- 什么是 HTTP? - 超文本传输协议(HTTP)是基于 TCP 的请求–响应协议
- 典型事务流程: - 客户端(浏览器或脚本)与服务器建立 TCP 连接
- 客户端发送 HTTP 请求
- 服务器处理请求并返回响应
- 连接关闭或复用
 
 
- TCP/IP 七层模型(应用层:HTTP)
- 常见状态码 - 2xx成功:- 200 OK,- 201 Created
- 3xx重定向:- 301 Moved Permanently
- 4xx客户端错误:- 400 Bad Request,- 401 Unauthorized,- 404 Not Found
- 5xx服务器错误:- 500 Internal Server Error
 
四、Requests 安装与基本示例
import requests# 发送 GET 请求
resp = requests.get('https://api.example.com/data')
print(resp.status_code)   # HTTP 状态码
print(resp.text)          # 响应内容(字符串)# 发送 POST 请求并上传文件
files = {'file': open('test.jpg', 'rb')}
resp = requests.post('https://api.example.com/upload', files=files)
print(resp.status_code, resp.text)
- 返回属性 - resp.status_code:整数状态码
- resp.text:响应体(Unicode 文本)
- resp.json():直接将响应解析为 Python 对象(如果是 JSON)
- resp.headers:响应头字典
 
五、Requests 支持的 HTTP 方法
| 方法 | 用途 | 
|---|---|
| GET | 获取资源 | 
| POST | 创建资源 | 
| PUT | 更新资源 | 
| DELETE | 删除资源 | 
| HEAD | 获取头部信息 | 
| OPTIONS | 获取支持的 HTTP 方法 | 
六、基于华为云 ModelArts 的在线服务访问
1. 获取 AK/SK
- 在华为云控制台 → 我的凭证 → 访问密钥,记录 Access Key (AK) 和 Secret Key (SK)
2. 获取在线服务信息
- 在 ModelArts 控制台 → 推理服务 → 找到已部署服务,复制 推理地址 URL
3. 下载 Python SDK
pip install apig-sdk
4. 编写调用代码
from apig_sdk import signer
import requests, json# 1) 构造请求签名
request = signer.HttpRequest('POST', url, {'x-sdk-content-sha256': 'UNSIGNED-PAYLOAD'})
sig = signer.Signer()
sig.Key = AK; sig.Secret = SK
sig.Sign(request)# 2) 发送请求
files = {'images': open('flower.jpg','rb')}
resp = requests.request(request.method,f"{request.scheme}://{request.host}{request.uri}",headers=request.headers,files=files
)# 3) 解析结果
print(resp.status_code)           
result = resp.json()              
print(json.dumps(result, indent=2))
- 参考文档:华为云推理服务 API 指南
七、JSON 模块简介与使用
-  什么是 JSON? - 一种轻量级的数据交换格式,文本可读性高
 
-  Python 内置模块 jsonimport json# 序列化:Python → JSON 字符串 s = json.dumps({'class': 'flower', 'score': 0.92}, ensure_ascii=False)# 反序列化:JSON 字符串 → Python obj = json.loads('{"class":"rose","score":0.87}')
八、Python 的文件 I/O 操作
-  基本函数 f = open('data.txt', 'r', encoding='utf-8') text = f.read() # 读取全部 f.close()with open('data.txt','w',encoding='utf-8') as f:f.write('Hello, ModelArts!\n') # 自动 close
-  常用模式 模式 含义 'r'只读(默认) 'w'写入(覆盖) 'a'追加 'rb'二进制读 'wb'二进制写 
九、Base64 编码简介
-  用途 - 减少 HTTP 请求数,将小图片直接嵌入 HTML/CSS/JS
- 简单“加密”传输(非安全加密)
- 适合小图标、背景图
 
-  Python 示例 import base64# 编码 data = open('flower.jpg','rb').read() b64 = base64.b64encode(data).decode('ascii')# 解码 raw = base64.b64decode(b64) open('out.jpg','wb').write(raw)
十、基于华为云 + PyQt 实现花卉分类桌面应用案例
-  环境准备 pip install PyQt5 requests apig-sdk
-  界面设计 - 一个按钮:选择本地图片
- 一个 QLabel:显示加载的图片
- 一个 QTextEdit:展示分类结果
 
-  工作流程 - 点击“打开图片” → 弹出文件对话框 → 读取并显示图片
- 将图片通过 Requests 调用 ModelArts 接口 → 解析 JSON
- 在结果框中按置信度从高到低显示:类别 + 得分
 
-  核心代码示例 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QFileDialog, QTextEdit from PyQt5.QtGui import QPixmap import requests, json from apig_sdk import signerclass FlowerApp(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle('花卉分类 Demo')self.resize(600,400)# … 初始化按钮、图片区、结果区 …def open_image(self):path, _ = QFileDialog.getOpenFileName(self, '选择图片', '', 'Images (*.png *.jpg)')pix = QPixmap(path).scaled(300,300)self.image_label.setPixmap(pix)self.call_inference(path)def call_inference(self, img_path):# 同上节:签名 + requests + resp.json()result = resp.json()# 排序并显示text = '\n'.join(f"{cls}: {score:.2f}" for cls,score in zip(result['detection_classes'], result['detection_scores']))self.result_edit.setPlainText(text)if __name__ == '__main__':app = QApplication([])win = FlowerApp()win.show()app.exec_()
-  运行: python flower_app.py,即可体验离线 GUI + 在线推理相结合的完整流程。
温馨提示:
- 调试时可在命令行打印
resp.text与resp.status_code,快速定位签名或网络错误- PyQt 界面可按需扩充:增加进度条、错误提示、模型选择等
- 在生产环境中,注意对 AK/SK 做妥善管理,不要硬编码在脚本中