# 网络、下载与常见报错

> 视频链接过期怎么办？下载要不要带 Authorization？Python JSON 解析报错怎么修？

<AccordionGroup>
  <Accordion title="成片 video_url 过期了怎么办？">
    `content.video_url` 是约 **2 小时有效的临时签名链接**。过期后重新调用查询接口 `GET /api/v3/contents/generations/tasks/{id}` 会得到新的下载链接。但强烈建议生成后**尽快转存**到自己的对象存储，不要长期依赖这个临时链接。
  </Accordion>
  <Accordion title="下载视频时要带 Authorization 头吗？">
    **不要**。`video_url` 本身是带签名的直链，下载时携带 `Authorization` 头反而可能导致失败。用干净的 GET 请求下载即可。
  </Accordion>
  <Accordion title="Python requests 报 JSON 解析错误 / 响应被截断？">
    在请求头加 **`Accept-Encoding: identity`**。个别网络环境下网关的 gzip 协商会导致 `requests` 解码异常、响应被截断。加这个头强制不压缩即可解决。

    ```python
    headers = {
        "Authorization": "Bearer sk-你的APIKey",
        "Accept-Encoding": "identity",  # 避免 gzip 解码异常
    }
    ```
  </Accordion>
  <Accordion title="请求超时或偶发 5xx？">
    视频生成耗时较长，请给创建 / 查询请求设置合理的超时，并对 5xx 指数退避重试（2s → 4s → 8s）。查询用轮询而非长连接等待。持续性的服务异常可关注 [服务状态](/live/overview)。
  </Accordion>
  <Accordion title="域名 / 路径应该怎么填？">
    Base URL 是 `https://api.looprouter.com`，视频接口路径 `/api/v3/contents/generations/tasks`，素材库 `/api/v3/assets?Action=...&Version=2024-01-01`。`/api` 前缀不能省略。详见 [API Key 与鉴权](/faq/api-key-and-auth)。
  </Accordion>
  <Accordion title="下载慢 / 大文件怎么处理？">
    用流式下载（`stream=True` / 分块写入）避免一次性载入内存，尤其是 `1080p` / `4k` 的长视频。示例见 [素材引用实战](/asset-management/asset-reference) 里的下载代码。
  </Accordion>
</AccordionGroup>

## 常见报错速查

| 现象 | 原因 | 处理 |
| --- | --- | --- |
| 视频 404 下载失败 | `video_url` 已过期（约 2 小时） | 重新查询任务获取新链接，尽快转存 |
| Python JSON 解析异常 / 截断 | 网关 gzip 协商问题 | 请求头加 `Accept-Encoding: identity` |
| 下载 403 | 带了 `Authorization` 头 | 下载直链时去掉鉴权头 |
| 404 找不到接口 | 漏了 `/api` 前缀 | 路径写全 `/api/v3/...` |
| 400 `asset not found or not active` | 素材还在 `Processing` 或 ID 写错 | 先 `GetAsset` 确认 `Active` |

## 相关文档

<CardGroup cols={3}>
  <Card title="素材引用实战" icon="wand-magic-sparkles" href="/asset-management/asset-reference">
    下载与报错速查
  </Card>
  <Card title="API Key 与鉴权" icon="key" href="/faq/api-key-and-auth">
    Base URL 与请求头
  </Card>
  <Card title="并发与限流" icon="gauge-high" href="/faq/concurrency-and-ratelimit">
    重试策略
  </Card>
</CardGroup>
