API Path
/aipaas/live/v1/digitalHuman/authenticate
请求协议
HTTPS
请求方法
POST
请求头部:
| 头部标签 | 必填 | 说明 | 类型 | 数据字典 | 限制 | 头部内容 | 示例 |
|---|---|---|---|---|---|---|---|
| Content-Type | 是 | 内容类型 | application/json | application/json | |||
| X-APP-ID | 是 | 控制台--应用管理--AppID | |||||
| Device-Uuid | 是 | 设备管理-设备uuid | |||||
| Authorization | 是 | 鉴权信息 |
请求参数 Json
Object
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| code | 请求状态码,固定1019 | 是 | [int] | 0 | 1019 | |
| data | 算法参数 | 是 | [object] | 0 | ||
| data>>task_id | 算法任务id【调用traceId,需要保证唯一,生成UUID传入就可以】 | 是 | [string] | 0 | 0d04322bee08401a9c15a5ef8643e64f | |
| data>>camera_id | 设备编码【调用设备编码,如果为视频流抽帧后的算法可以传入对应设备编码,如果没有可以传入任意值】 | 是 | [string] | 0 | A15414521025 | |
| data>>image | file_type取值 0、1、2、3,默认 0;表示image字段的数据内容,0 = 图片 base64,1 = 图片下载地址,2 = 视频下载地址,3 = 视频 base64 | 是 | [string] | 0 | iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQqAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC | |
| data>>algo_tasks | 算法参数数组 | 是 | [array] | 0 | ||
| data>>algo_tasks>>algo_config | 单个参数信息 | 是 | [object] | 0 | ||
| data>>algo_tasks>>algo_config>>algo_roi | roi区域配置 | 是 | [object] | 0 | ||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_type | roi坐标类型,1-绝对坐标,2-相对坐标 | 是 | [int] | 1:绝对坐标,2:相对坐标 | 0 | 1 |
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list | 设定区域坐标列表【如果is_full_region为true,则传入空数组】 | 否 | [array] | 0 | ||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>name | 区域id【可随意生成,保证全局唯一即可】 | 是 | [string] | 0 | head | |
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>point_list | 区域坐标点集【最小3个点,最大支持11个点】 | 是 | [array] | 0 | ||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>point_list>>x | X轴坐标 | 是 | [float] | 0 | 0.0 | |
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>point_list>>y | Y轴坐标 | 是 | [float] | 0 | 1.0 | |
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>extra_params | 区域扩展参数 | 否 | [array] | 0 | ||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>extra_params>>key | 参数名 | 是 | [string] | 0 | type | |
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>extra_params>>value | 参数值 | 是 | [string] | 0 | 1 | |
| data>>algo_tasks>>algo_config>>algo_roi>>is_full_region | 是否全景图【true-是,false-否】本能力不支持传false | 是 | [boolean] | true:是,false:否 | 0 | true |
| data>>algo_tasks>>algo_config>>extra_params | 算法定制化参数 | 否 | [array] | 0 | ||
| data>>algo_tasks>>algo_config>>extra_params>>key | 参数名 | 是 | [string] | 0 | algo_type | |
| data>>algo_tasks>>algo_config>>extra_params>>value | 参数值 | 是 | [string] | 0 | 示例: 0.8 |
响应内容:
返回结果
成功 (200)
Json
Object
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| code | 算法类型,固定1020 | 是 | [int] | 0 | 1020 | |
| data | 算法调用结果 | 是 | [object] | 0 | ||
| data>>error_code | 错误码,值为APP_ERR_OK则为成功 | 是 | [string] | 0 | APP_ERR_OK | |
| data>>error_message | 错误描述 | 是 | [string] | 0 | 正常状态 | |
| data>>camera_id | 创建任务时传入的设备编码 | 是 | [string] | 0 | A15414521025 | |
| data>>task_id | 创建任务时传入的算法任务id | 是 | [string] | 0 | 0d04322bee08401a9c15a5ef8643e64f | |
| data>>frame_id | 图像帧号 | 是 | [string] | 0 | 100 | |
| data>>send_pts_ms | 发送时间戳 | 是 | [string] | 0 | 1718245892700 | |
| data>>pull_pts_ms | 拉流时间戳,本能力无意义 | 是 | [string] | 0 | 0 | |
| data>>display_image | 展示图片base64,本能力无意义 | 是 | [string] | 0 | [] | |
| data>>frame_width | 图片宽度像素 | 是 | [string] | 0 | 1920 | |
| data>>frame_height | 图片高度像素 | 是 | [string] | 0 | 1080 | |
| data>>algo_outputs | 算法处理结果数组 | 是 | [array] | 0 | ||
| data>>algo_outputs>>objectinfo | 检测到的目标对象数组【未检测到目标时返回空数组】 | 是 | [array] | 0 | ||
| data>>algo_outputs>>objectinfo>>class_name | 目标类别名称【值必须为英文小写字母且遵循蛇形命名法(单词下划线分割)】 | 是 | [string] | 0 | 0:fake 1:real | |
| data>>algo_outputs>>objectinfo>>class_id | 目标类别id | 是 | [int] | 0 | 0:fake 1:real | |
| data>>algo_outputs>>objectinfo>>rect | 目标位置坐标 | 是 | [object] | 0 | ||
| data>>algo_outputs>>objectinfo>>rect>>x0 | 左上X轴坐标 | 是 | [float] | 0 | 0.0 | |
| data>>algo_outputs>>objectinfo>>rect>>y0 | 左上Y轴坐标 | 是 | [float] | 0 | 0.0 | |
| data>>algo_outputs>>objectinfo>>rect>>x1 | 右下X轴坐标 | 是 | [float] | 0 | 100.0 | |
| data>>algo_outputs>>objectinfo>>rect>>y1 | 右下Y轴坐标 | 是 | [float] | 0 | 100.0 | |
| data>>algo_outputs>>objectinfo>>confidence | 目标置信度,本业务无效 -1 | 是 | [float] | 0 | -1 | |
| data>>algo_outputs>>objectinfo>>track_id | 目标追踪ID【不存在则固定返回空字符串】 | 是 | [string] | 0 | "" | |
| data>>algo_outputs>>objectinfo>>score | 本业务使用该得分,输出分值表示为真的概率。输入图像质量过低将影响判断结果。 | 是 | [float] | 0 | 0.99 | |
| data>>algo_outputs>>objectinfo>>extra_message | 目标额外信息【不存在则固定返回空数组】 | 否 | [array] | 0 | ||
| data>>algo_outputs>>objectinfo>>extra_message>>key | 参数名 | 是 | [string] | 0 | type | |
| data>>algo_outputs>>objectinfo>>extra_message>>value | 参数值 | 是 | [string] | 0 | 1 | |
| data>>algo_outputs>>objectinfo>>image_message | 目标图片信息【不存在则固定返回空数组】 | 否 | [array] | 0 | ||
| data>>algo_outputs>>objectinfo>>image_message>>key | 图片名称 | 是 | [string] | 0 | xxx.jpg | |
| data>>algo_outputs>>objectinfo>>image_message>>value | 图片Base64【jpeg格式base64编码】 | 是 | [string] | 0 | iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQqAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC | |
| data>>algo_outputs>>objectinfo>>feature | 特征值,float数组【特征提取算法必返回】 | 否 | [array] | 0 | [0.0620517209172249, 0.0471773408353329] | |
| data>>algo_outputs>>objectinfo>>attribute | 属性值数组【分类属性列表】 | 否 | [array] | 0 | ||
| data>>algo_outputs>>objectinfo>>attribute>>key | 属性名称 | 是 | [string] | 0 | sex | |
| data>>algo_outputs>>objectinfo>>attribute>>value | 属性值 | 是 | [string] | 0 | 1 | |
| data>>algo_outputs>>objectinfo>>attribute>>score | 属性置信度(0~1)【不存在则固定返回-1】 | 是 | [float] | 0 | 0.99 | |
| data>>extra_message | 算法处理结果额外信息,透传给上层应用 | 否 | [array] | 0 | ||
| data>>extra_message>>key | 参数名【如果为多算法镜像,固定返回算法标识的key必须为algo_type】 | 是 | [string] | 0 | ||
| data>>extra_message>>value | 参数值【如果为多算法镜像,值为具体算法标识】 | 是 | [string] | 0 | ||
| data>>image_message | 算法处理结果额外图像信息 | 否 | [array] | 0 | [] |
成功示例
{
"code": 1020,
"data": {
"error_code": "APP_ERR_OK",
"error_message": "",
"camera_id": "0",
"task_id": "to112enlarge8#ct_huiliu#h5_202311_silent#18443.jpg",
"frame_id": "",
"frame_width": "",
"frame_height": "",
"send_pts_ms": "1778574097856",
"pull_pts_ms": "0",
"display_image": "",
"algo_outputs": [{
"objectinfo": [{
"class_name": "fake",
"rect": {
"x0": 0,
"y0": 0,
"x1": 445,
"y1": 594
},
"track_id": "",
"extra_message": [],
"image_message": [],
"feature": [],
"attribute": [],
"class_id": 0,
"confidence": -1,
"score": 0.0291900634765625
}]
}],
"extra_message": [],
"image_message": []
}
}
基于图片或视频对人脸的换脸进行鉴伪,图片大小3M 以内,视频大小8M以内,视频时长不超过5秒,否则可能返回超时。支持图片格式为:jpg,png;支持视频格式为.mp4, .avi, .flv,其他格式不保证正确返回。
| 修订日期 | 算法版本号 | 修订内容 |
|---|---|---|
| 2026-05-26 | V1.3.0 | 首版本发布 |
服务接口调用时需要严格遵循服务鉴权规则,服务调用鉴权规则请参见:开发指南 - 接口签名认证。
不支持区域配置,请按全图模式传入,如果传入algo_config或algo_roi有问题,会返回报错,但是部分报错缺少描述信息,可通过错误码识别。algo_roi固定值为:
{
"is_full_region": true,
"roi_type": 1,
"roi_list": []
}
参数路径:data->algo_tasks->algo_config->extra_params
| 参数中文名 | 参数名称(key) | 参数值(value) | 必填 | 内部数据类型 | 备注 |
|---|---|---|---|---|---|
| 关键点数据 | lamks | 字符串格式一维列表 | 否 | 一维数组 | json dumps 后的一维数组,仅支持 5 个点 (10 个正整数)、72 个点 (144 个正整数)、106 个点 (212 个正整数);file_type 为 0 或 1 时生效,默认为不填,内部可自动提取关键点 |
| 文件类型 | file_type | 字符串格式整数 | 否 | 整型 | 取值 0、1、2、3,默认 0;表示image字段的数据内容,0 = 图片 base64,1 = 图片下载地址,2 = 视频下载地址,3 = 视频 base64 |
| 得分阈值 | threshold | 字符串格式浮点数 | 否 | 浮点型 | 划分真假的判定阈值,取值范围 0-1,默认 0.5 |
| 抽帧频率 | fps | 字符串格式整数 | 否 | 整型 | 每秒抽帧数量,取值 2-5,不可大于视频实际帧率;file_type 为 2 或 3 时生效,默认 2 |
| 类别中文名 | 类别id(class_id) | 类别编码(class_name) | 类别说明 | 属性中文名 | 属性名称(attribute->key) | 属性值(attribute->value) | 属性内部数据类型 | 属性说明 |
|---|---|---|---|---|---|---|---|---|
| 真 | 1 | real | ||||||
| 假 | 0 | fake |
参数路径:data->extra_message
{
"code": 1019,
"data": {
"camera_id": "1",
"task_id": "1",
"algo_tasks": [
{
"algo_config": {
"algo_roi": {
"is_full_region": true,
"roi_type": 1,
"roi_list": []
},
"extra_params": [
{
"key": "lamks",
"value": "[160,358,160,384,...]"
},
{
"key": "file_type",
"value": "3"
},
{
"key": "threshold",
"value": "0.5"
},
{
"key": "fps",
"value": "2"
}
]
}
}
],
"image": ""
}
}
| 状态码 | 状态描述 | 英文描述 | 对应数字编码 |
|---|---|---|---|
| APP_ERR_OK | 正常状态 | ok | 0 |
| APP_ERR_FAILURE | 系统异常 | error | -1 |
| APP_PARAM_ERR_FAILURE | 参数异常 | Invalid parameter | 10 |
| APP_ERR_COMM_FAILURE | 失败 | General Failed | 1001 |
| APP_ERR_COMM_INNER | 内部错误 | Internal error | 1002 |
| APP_ERR_COMM_INVALID_POINTER | 无效指针 | Invalid Pointer | 1003 |
| APP_ERR_COMM_INVALID_PARAM | 无效参数 | Invalid parameter | 1004 |
| APP_ERR_COMM_UNREALIZED | 未实现 | Not implemented | 1005 |
| APP_ERR_COMM_OUT_OF_MEM | 内存溢出 | Out of memory | 1006 |
| APP_ERR_COMM_ALLOC_MEM | 内存分配错误 | memory allocation error | 1007 |
| APP_ERR_COMM_FREE_MEM | 内存释放错误 | free memory error | 1008 |
| APP_ERR_COMM_OUT_OF_RANGE | 内存越界 | out of range | 1009 |
| APP_ERR_COMM_NO_PERMISSION | 无权限 | NO Permission | 1010 |
| APP_ERR_COMM_TIMEOUT | 超时 | Timed out | 1011 |
| APP_ERR_COMM_NOT_INIT | 未初始化 | Not initialized | 1012 |
| APP_ERR_COMM_INIT_FAIL | 初始化错误 | initialize failed | 1013 |
| APP_ERR_COMM_INPROGRESS | 操作正在进行中 | Operation now in progress | 1014 |
| APP_ERR_COMM_EXIST | 资源已存在 | Object; file or other resource already exist | 1015 |
| APP_ERR_COMM_NO_EXIST | 资源不存在 | Object; file or other resource doesn't exist | 1016 |
| APP_ERR_COMM_BUSY | 资源在使用中 | Object; file or other resource is in use | 1017 |
| APP_ERR_COMM_FULL | 无可用资源 | No available Device or resource | 1018 |
| APP_ERR_COMM_OPEN_FAIL | 文件或资源打开失败 | Device; file or resource open failed | 1019 |
| APP_ERR_COMM_READ_FAIL | 文件或资源读失败 | Device; file or resource read failed | 1020 |
| APP_ERR_COMM_WRITE_FAIL | 文件或资源写失败 | Device; file or resource write failed | 1021 |
| APP_ERR_COMM_DESTORY_FAIL | 文件或资源释放失败 | Device; file or resource destory failed | 1022 |
| APP_ERR_COMM_EXIT | 数据流结束,退出程序 | End of data stream; stop the application | 1023 |
| APP_ERR_COMM_CONNECTION_CLOSE | 连接断开 | Out of connection; Communication shutdown | 1024 |
| APP_ERR_COMM_CONNECTION_FAILURE | 连接失败 | connection fail | 1025 |
| APP_ERR_COMM_STREAM_INVALID | 无效流 | ACL stream is null pointer | 1026 |
| APP_ERR_COMM_REGION_ERROR | 区域校验失败 | region error | 1027 |
| APP_ERR_COMM_DECODE_FAIL | 图片解码失败 | Image decode fail | 1028 |
| APP_ERR_COMM_MODELINIT_FAIL | 模型初始化失败 | Model init fail | 1029 |
| APP_ERR_COMM_MODELINFER_FAIL | 模型推理失败 | Model infer fail | 1030 |
| APP_ERR_COMM_PARAM_FAILURE | 参数校验失败 | param check fail | 1031 |
| APP_ERR_STREAMPULLER_BASE | 拉流模块(视频流有效) | For StreamPuller | 2000 |
| APP_ERR_STREAMPULLER_OPEN_FAIL | 流打开失败(视频流有效)(视频流有效) | Open input stream failed | 2001 |
| APP_ERR_STREAMPULLER_STREAMINFOFIND_FAIL | 查找流信息失败(视频流有效) | Find stream information failed | 2002 |
| APP_ERR_STREAMPULLER_EOF | 流结束(视频流有效) | Stream if EOF | 2003 |
| APP_ERR_STREAMPULLER_READFRAME_FAIL | 读取帧失败(视频流有效) | Stream read error frame | 2004 |
| APP_ERR_STREAMPULLER_REOPEN_FAIL | 重新打开流失败(视频流有效) | Reopen input stream failed | 2005 |
| APP_ERR_STREAMPULLER_STREAMFIND_FAIL | 查找视频channel失败(视频流有效) | Find no video stream | 2006 |
| APP_ERR_STREAMPULLER_STREAMFORMAT_ERROR | 不支持的视频格式(视频流有效) | Stream is unsupported video format | 2007 |
| APP_ERR_VIDEODECODER_BASE | 解码模块(视频流有效) | For Videodecoder | 2020 |
| APP_ERR_VIDEODECODER_CREATE_FAIL | 创建解码器失败(视频流有效) | Create MxBase::VideoDecoder Exception | 2021 |
| APP_ERR_VIDEODECODER_UNSUPPORT_FORMAT | 不支持的视频格式(视频流有效) | Stream is unsupported video format | 2022 |
| APP_ERR_VIDEODECODER_DECODE_FAIL | 视频解码失败(视频流有效) | decode fail | 2023 |
| APP_ERR_CONFIG_BASE | 参数配置 | For modulebase | 2040 |
| APP_ERR_CONFIG_ADD_FAIL | 添加参数失败 | Add new algo config failed | 2041 |
| APP_ERR_CONFIG_UPDATE_FAIL | 更新参数失败 | update config failed | 2042 |
| APP_ERR_CONFIG_DELETE_FAIL | 删除参数失败 | delete config failed | 2043 |
| APP_ERR_QUEUE_BASE | 队列 | 5000 | |
| APP_ERR_QUEUE_EMPTY | 队列为空 | Queue: empty queue | 5001 |
| APP_ERR_QUEUE_STOPED | 队列已停止 | Queue: queue stoped | 5002 |
| APP_ERR_QUEUE_FULL | 队列满 | Queue: full queue | 5003 |
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* 为保证示例可以正常运行,请确认maven中是否存在以下依赖:
* <dependency>
* <groupId>cn.hutool</groupId>
* <artifactId>hutool-all</artifactId>
* <version>5.8.29</version>
* </dependency>
* <dependency>
* <groupId>com.alibaba</groupId>
* <artifactId>fastjson</artifactId>
* <version>1.2.83</version>
* </dependency>
*/
public class Example {
public static void example() {
try {
// 算法调用地址,请根据实际情况修改
String url = "算法调用地址";
// 设置请求头
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
headers.put("Device-Uuid", "2018619061498245122");
headers.put("X-APP-ID", "你实际的AppId");
headers.put("Authorization", "你实际的Authorization");
// 设置请求参数,请根据实际情况修改
String requestString = "{\n" +
" \"code\":1019,\n" +
" \"data\":{\n" +
" \"image\":\"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQqAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC\",\n" +
" \"camera_id\":\"A15414521025\",\n" +
" \"task_id\":\"0d04322bee08401a9c15a5ef8643e64f\",\n" +
" \"algo_tasks\":[\n" +
" {\n" +
" \"algo_config\":{\n" +
" \"extra_params\":[\n" +
" {\n" +
" \"value\":\"示例: 0.8\",\n" +
" \"key\":\"algo_type | [string] | 多算法包算法标识 | 默认值 threshold | [string] | 阈值 | - warningCount | [string] | 连续超过几次告警 | -\"\n" +
" }\n" +
" ],\n" +
" \"algo_roi\":{\n" +
" \"roi_list\":[\n" +
" {\n" +
" \"extra_params\":[\n" +
" {\n" +
" \"value\":\"1\",\n" +
" \"key\":\"type\"\n" +
" }\n" +
" ],\n" +
" \"name\":\"head\",\n" +
" \"point_list\":[\n" +
" {\n" +
" \"x\":0.0,\n" +
" \"y\":1.0\n" +
" }\n" +
" ]\n" +
" }\n" +
" ],\n" +
" \"roi_type\":1,\n" +
" \"is_full_region\":true\n" +
" }\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
// 发起HTTP请求
HttpResponse response = HttpRequest.post(url)
.headerMap(headers, true)
.body(requestString)
.execute();
// 输出响应结果
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
example();
}
}
import json
import hashlib
import hmac
import time
import re
import urllib.parse
import requests
import warnings
from datetime import datetime
import logging
# 配置日志,设置日志级别为INFO,并指定日志格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 配置环境变量
X_APP_ID = "yourAppId"
AUTHORIZATION = "yourAuthorization"
# 请求的URL
url = "算法调用地址"
# 请求数据
request_data = {
"code":1019,
"data":{
"image":"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQqAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC",
"camera_id":"A15414521025",
"task_id":"0d04322bee08401a9c15a5ef8643e64f",
"algo_tasks":[
{
"algo_config":{
"extra_params":[
{
"value":"示例: 0.8",
"key":"algo_type | [string] | 多算法包算法标识 | 默认值 threshold | [string] | 阈值 | - warningCount | [string] | 连续超过几次告警 | -"
}
],
"algo_roi":{
"roi_list":[
{
"extra_params":[
{
"value":"1",
"key":"type"
}
],
"name":"head",
"point_list":[
{
"x":0.0,
"y":1.0
}
]
}
],
"roi_type":1,
"is_full_region":True
}
}
}
]
}
}
# 构建请求头
headers = {
"Content-Type": "application/json",
"Device-Uuid": "2018619061498245122",
"X-APP-ID": X_APP_ID,
"Authorization": AUTHORIZATION
}
def timeSimple(timestamp):
# 将时间戳转换为HH:MM:SS格式的时间字符串
dt_object = datetime.fromtimestamp(timestamp)
formatted_time = dt_object.strftime("%H:%M:%S")
return formatted_time
def send_request(url):
try:
start_time = time.time()
logging.info(f"请求路径: {url}")
logging.info(f"开始发送: {timeSimple(start_time)}")
with requests.post(
url, json=request_data, headers=headers, stream=True, verify=False
) as response:
first_packet_time = None
if response.status_code == 200:
logging.info(f"接受到返回: {timeSimple(time.time())}")
for chunk in response.iter_content(chunk_size=1024):
if chunk:
if first_packet_time is None:
first_packet_time = time.time()
logging.info(
f"Received chunk: {timeSimple(time.time())} {chunk.decode('utf-8')}"
)
end_time = time.time()
logging.info(f"Time to first byte (TTFB): {first_packet_time - start_time:.3f} seconds")
logging.info(f"Request completed in {end_time - start_time:.3f} seconds")
else:
logging.error(f"Request failed with status code {response.status_code}")
except Exception as e:
logging.error(f"An error occurred: {e}")
# 发送请求
send_request(url)
logging.info(f"headers = {headers}")