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。