德他数据 / API 教程

Python HTTP 接入示例

使用 Python 标准库 urllib 发送德他非流式文本请求,演示环境变量、超时、HTTP 错误与请求编号处理。

作者:德他数据技术团队 · 更新于 2026-09-28

核心解答

Python 示例从环境变量读取密钥与模型,通过 urllib 发送一次非流式请求。它不自动重试;HTTP 错误应保留状态与请求编号,网络异常应先核验账务,不能把超时当成未执行。

环境准备

使用 Python 3。在运行环境设置 DETA_API_KEY、DETA_MODEL;DETA_BASE_URL 默认正式域名,末尾不含 /v1。

只在后端运行,不自动重试;示例发送一次真实请求,可能产生费用。

请求代码

import json
import os
import urllib.request
import urllib.error

base = os.environ.get("DETA_BASE_URL", "https://www.data123.com.cn").rstrip("/")
payload = {
    "model": os.environ["DETA_MODEL"],
    "messages": [{"role": "user", "content": "请用一句话打招呼。"}],
    "max_tokens": 64,
    "stream": False,
}
request = urllib.request.Request(
    base + "/v1/chat/completions",
    data=json.dumps(payload).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + os.environ["DETA_API_KEY"],
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
        print(result["choices"][0]["message"]["content"])
except urllib.error.HTTPError as error:
    print("HTTP", error.code, "request", error.headers.get("X-Deta-Request-ID"))
    print(error.read().decode("utf-8"))
except urllib.error.URLError:
    print("连接或响应结果未确认,请先核验账务,不要立即重复发送。")

使用前核对

选择已核准模型,确认余额和令牌预算。公网客户端统一使用 https://www.data123.com.cn/v1 作为 API Base URL。

常见问题

DETA_BASE_URL 要不要带 /v1?

本篇代码会自动拼接 /v1/chat/completions,所以变量只填服务根地址,不再追加 /v1。

接下来阅读

接口开放范围 · 错误码排查 · 密钥安全与上线检查