# MinerU 异步解析API：先存提交回执，再恢复查询和核对下载文件

## 实际范围

教程按 MinerU 4.0 文档编写，需核对实际安装版本及 tier。许可为 Apache 2.0 加额外条款；在线服务标识、规模门槛与模型许可见官方 LICENSE。本站未安装 MinerU 或运行解析模型。

已实际执行：原创输入生成、PDF渲染、文件哈希/教材事实检查与两条故意错误拒绝。人工reference-manual.json不冒充目标工具输出；actual-template.json为空模板，不能视为实际结果。

## 使用

```bash
python3 verify.py
python3 verify.py --actual my-observation.json
```

P03默认检查会用pypdf实际读取report-a/report-b并要求broken解析失败，先运行 python3 -m pip install pypdf。不连接任何外部服务或数据库。--actual检查你填写的规范化事实记录，不自动识别任意工具原生导出；仍须逐项回读原生输出。

## 七步操作

1. 检查两个有效PDF和一个坏文件

report-a.pdf为一页，report-b.pdf为两页；broken.pdf故意保留PDF头但缺少完整结构。安装pypdf后运行脚本，实际解析两份有效文件并要求坏文件被拒绝；只看%PDF文件头不够。

2. 读取自己服务的能力接口

固定 MinerU 4.0 V1 服务，按真实 /docs 和官方 scripts/http_api_example.sh 核对。当前 /v1/tasks 与 /v1/file_parse 共用 Job lifecycle；便利路由不一定在所有云服务存在。本页没有运行服务。

3. 提交后立刻保存真实回执

按自己的OpenAPI创建任务；需要异步ZIP时提交output_formats=zip。保存服务实际返回的task_id、status_url、result_url、文件归属和输入哈希，不编造编号或拼接未知端点。

4. 退出客户端再恢复查询

同步等待超时可能返回HTTP 202及task_id/status_url/result_url，后台继续。关闭客户端后读取原生回执，按status_url恢复查询，只有实际状态失败才记为任务失败。

5. 先检查响应再保存结果

下载核对HTTP状态、Content-Type和真实字节，HTML错误页不可冒充ZIP。API Key只发给受信任同源地址，302跨源跳转不转发认证。先打开ZIP检查CRC，再核对原输入归属。

6. 填写实际运行台账

在observations-template.json为真实任务填写task_id、status_url、result_url、input_file、input_sha256与status，有下载再填download_file。verify.py --jobs检查记录、输入哈希和ZIP CRC，不查询远程服务。

7. 区分材料验收与任务验收

本包实际解析确认两份有效PDF为1/2页，并要求截断的broken.pdf解析失败；这不包含原生任务回执。保留实际提交/恢复/下载三个阶段文件后，才能声称完成MinerU API运行。

## 原创与图片身份

source.pdf及数据文件是本站原创虚构教材。页面官方截图只说明工具入口；人工真值图与材料核验图都注明身份，未生成目标软件的假界面或假模型结果。

## 官方依据

- V1 HTTP API: https://opendatalab.github.io/MinerU/usage/http_api/
- 官方完整HTTP示例脚本: https://github.com/opendatalab/MinerU/blob/master/scripts/http_api_example.sh
