Postman/cURL 接入教程
快速测试API调试更新时间:2025-11-27产品简介
本教程指导您使用 Postman 和 cURL 调用海鲸AI的图像和视频生成 API,帮助您快速测试和调试接口。
工具介绍
| 工具 | 类型 | 特点 | 适用人群 |
|---|---|---|---|
| Postman | 图形化工具 | • 界面直观 • 操作简单 • 功能丰富 | 初学者、接口测试人员 |
| cURL | 命令行工具 | • 轻量级 • 脚本友好 • 跨平台 | 开发者、运维人员 |
工具选择建议
- 🎯 新手推荐 → Postman(可视化操作)
- 🎯 开发者推荐 → cURL(脚本集成)
- 🎯 快速测试 → 两者均可
- 🎯 生产环境 → 使用官方 SDK 或自行实现 HTTP 调用
本教程内容
本文以 "文生图" 为例,演示从创建任务到获取结果的完整流程:
1. 创建生成任务(POST请求)
↓
2. 获取 task_id
↓
3. 轮询查询结果(GET请求)
↓
4. 获取图像/视频 URL
↓
5. 下载保存结果重要说明
- Postman 和 cURL 仅适用于快速测试和调试
- 生产环境建议使用 官方 SDK 或自行实现 HTTP 调用
- 图像/视频生成采用 异步调用机制,需要两步完成
异步调用机制
由于图像/视频生成任务耗时较长(十几秒到数分钟不等),海鲸AI 的 HTTP API 采用了异步调用机制。
调用流程
sequenceDiagram
participant Client as 客户端
participant API as 海鲸AI API
participant Engine as 生成引擎
Client->>API: 1. POST 创建任务
API->>Engine: 提交生成任务
API-->>Client: 2. 返回 task_id
loop 轮询查询
Client->>API: 3. GET 查询结果
API->>Engine: 检查任务状态
alt 任务完成
Engine-->>API: 返回结果 URL
API-->>Client: 4. 返回图像/视频 URL
else 任务进行中
API-->>Client: 返回 RUNNING 状态
end
end
Client->>Client: 5. 下载并保存结果两步调用
步骤 1:创建任务
请求方式:POST
作用:提交生成任务,立即返回 task_id
响应示例:
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "PENDING"
},
"request_id": "req-001"
}步骤 2:查询结果
请求方式:GET
作用:使用 task_id 轮询查询,直到任务完成
响应示例(进行中):
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "RUNNING",
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 0
}
}
}响应示例(完成):
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "SUCCEEDED",
"results": [
{
"url": "https://example.com/image.jpg"
}
]
}
}任务状态说明
| 状态 | 说明 | 处理方式 |
|---|---|---|
PENDING | 任务排队中 | 继续轮询 |
RUNNING | 任务执行中 | 继续轮询 |
SUCCEEDED | 任务成功 | 获取结果 URL |
FAILED | 任务失败 | 查看错误信息 |
UNKNOWN | 状态未知 | 重新查询或联系支持 |
轮询建议
- ⏰ 首次查询:等待 3-5 秒后开始
- ⏰ 查询间隔:建议 2-3 秒一次
- ⏰ 超时时间:
- 文生图:30-60 秒
- 文生视频:5-10 分钟
- ⏰ task_id 有效期:24 小时
- ⏰ 结果 URL 有效期:24 小时(及时下载)
前置准备
1. 获取 API Key
- 访问 海鲸AI控制台
- 注册并登录账户
- 在 API 管理页面生成 API Key
- 确保账户余额充足
新用户福利
- 🎁 新注册用户可获得免费额度
- 💰 可用于所有模型推理服务
2. 安装工具
Postman(推荐新手)
- 访问 Postman 官网
- 下载对应系统的安装包
- 安装并启动 Postman
| 平台 | 下载链接 | 说明 |
|---|---|---|
| Windows | 下载 | 支持 Windows 10+ |
| macOS | 下载 | 支持 macOS 10.12+ |
| Linux | 下载 | 支持主流发行版 |
cURL(开发者工具)
大多数系统已预装 cURL,检查方法:
curl --versioncurl --version如果未安装:
brew install curlsudo apt-get install curl# Windows 10+ 已内置 curl
# 或下载 Git for Windows(包含 curl)3. 配置 API Key 环境变量(cURL 用户)
为了方便使用,建议将 API Key 配置为环境变量:
# 临时设置(当前终端有效)
export DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxx"
# 永久设置(添加到 ~/.bashrc 或 ~/.zshrc)
echo 'export DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxx"' >> ~/.zshrc
source ~/.zshrc# 临时设置(当前会话有效)
$env:DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxx"
# 永久设置(用户环境变量)
[Environment]::SetEnvironmentVariable("DASHSCOPE_API_KEY", "sk-xxxxxxxxxxxxxxxx", "User")# 临时设置
set DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxx
# 永久设置
setx DASHSCOPE_API_KEY "sk-xxxxxxxxxxxxxxxx"验证配置:
echo $DASHSCOPE_API_KEY$env:DASHSCOPE_API_KEYecho %DASHSCOPE_API_KEY%方式一:使用 Postman
Postman 是一款功能强大的 API 测试工具,界面直观,适合快速测试。
步骤 1:创建生成任务
1.1 配置请求基本信息
- 打开 Postman
- 单击 "New" → "HTTP Request"
- 配置以下信息:
| 配置项 | 值 | 说明 |
|---|---|---|
| 请求方法 | POST | 创建任务使用 POST |
| 请求 URL | https://api.your-domain.com/api/v1/services/aigc/text2image/image-synthesis | 替换为实际 API 地址 |
地域说明
- 中国大陆版:
https://api.your-domain.com/api/v1/services/aigc/text2image/image-synthesis - 国际版:
https://api-intl.your-domain.com/api/v1/services/aigc/text2image/image-synthesis
请根据您的 API Key 地域选择对应的 URL。
1.2 配置请求头(Headers)
切换到 Headers 标签页,添加以下请求头:
| Key | Value | 说明 |
|---|---|---|
X-DashScope-Async | enable | 启用异步模式 |
Authorization | Bearer sk-xxxxxxxxxxxxxxxx | 填入您的 API Key |
Content-Type | application/json | JSON 格式 |
安全提示
- 🔒
Authorization的值格式为:Bearer+ 空格 + API Key - 🔒 不要遗漏
Bearer前缀 - 🔒 不要将 API Key 分享给他人
1.3 配置请求体(Body)
切换到 Body 标签页:
- 选择 raw
- 选择 JSON 格式
- 输入以下内容:
{
"model": "wanx2.1-t2i-turbo",
"input": {
"prompt": "一间有着精致窗户的花店,漂亮的木质门,摆放着花朵"
},
"parameters": {
"size": "1024*1024",
"n": 1
}
}- 单击右侧的 Beautify 按钮格式化 JSON
参数说明
model(必需)
- 模型名称
- 文生图:
wanx2.1-t2i-turbo、wanx2.1-t2i-plus - 文生视频:
wanx2.1-t2v-turbo
input.prompt(必需)
- 生成描述
- 建议:详细、具体的描述,中英文均可
- 长度:建议 10-500 字符
parameters.size
- 图像尺寸
- 可选值:
1024*1024、720*1280、1280*720
parameters.n
- 生成数量
- 范围:1-4
- 注意:数量越多,消耗Token越多
1.4 发送请求并获取 task_id
- 单击 Send 按钮
- 查看响应结果(Response)
成功响应示例:
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "PENDING"
},
"request_id": "req-001",
"code": "200",
"message": "success"
}- 记录 task_id:
abc123-def456-ghi789
重要提醒
- ✅ 立即保存 task_id,用于后续查询
- ⏰ task_id 有效期 24 小时
- ❌ 超时后将无法查询结果
步骤 2:查询生成结果
2.1 配置查询请求
- 创建新的 HTTP Request
- 配置以下信息:
| 配置项 | 值 | 说明 |
|---|---|---|
| 请求方法 | GET | 查询结果使用 GET |
| 请求 URL | https://api.your-domain.com/api/v1/tasks/{task_id} | 替换 {task_id} 为实际的任务ID |
URL 示例:
https://api.your-domain.com/api/v1/tasks/abc123-def456-ghi7892.2 配置请求头
切换到 Headers 标签页,添加:
| Key | Value |
|---|---|
Authorization | Bearer sk-xxxxxxxxxxxxxxxx |
2.3 发送请求并获取结果
- 单击 Send 按钮
- 查看响应结果
任务进行中:
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "RUNNING",
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 0
}
}
}任务完成:
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "SUCCEEDED",
"results": [
{
"url": "https://example.com/generated-image.jpg",
"code": "200"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
},
"usage": {
"image_count": 1
}
},
"request_id": "req-002"
}- 获取图像 URL:
https://example.com/generated-image.jpg
2.4 下载图像
- 复制
url字段的值 - 在浏览器中打开 URL
- 右键保存图像
重要提醒
- ⏰ 图像 URL 有效期 24 小时
- ❌ 过期后将无法访问
- ✅ 请及时下载并保存到本地
Postman 高级技巧
1. 保存为 Collection
将请求保存为 Collection,方便重复使用:
- 单击 Save 按钮
- 创建新的 Collection(如"海鲸AI图像生成")
- 将两个请求都保存到 Collection
2. 使用环境变量
避免每次手动修改 API Key:
- 单击右上角的 Environments
- 创建新环境(如"海鲸AI开发环境")
- 添加变量:
api_key:sk-xxxxxxxxxxxxxxxxbase_url:https://api.your-domain.com
- 在请求中使用:
、
3. 自动化测试
在 Tests 标签页添加脚本:
// 自动提取 task_id
if (pm.response.code === 200) {
const response = pm.response.json()
const taskId = response.output.task_id
pm.environment.set('task_id', taskId)
console.log('Task ID:', taskId)
}这样可以自动将 task_id 保存到环境变量,在第二步直接使用 。
方式二:使用 cURL
cURL 是命令行HTTP工具,适合开发者和脚本自动化。
步骤 1:创建生成任务
打开终端(Terminal、PowerShell、CMD 等),执行以下命令:
curl -X POST https://api.your-domain.com/api/v1/services/aigc/text2image/image-synthesis \
-H 'X-DashScope-Async: enable' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "wanx2.1-t2i-turbo",
"input": {
"prompt": "一间有着精致窗户的花店,漂亮的木质门,摆放着花朵"
},
"parameters": {
"size": "1024*1024",
"n": 1
}
}'curl -X POST https://api-intl.your-domain.com/api/v1/services/aigc/text2image/image-synthesis \
-H 'X-DashScope-Async: enable' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "wanx2.1-t2i-turbo",
"input": {
"prompt": "一间有着精致窗户的花店,漂亮的木质门,摆放着花朵"
},
"parameters": {
"size": "1024*1024",
"n": 1
}
}'成功响应示例:
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "PENDING"
},
"request_id": "req-001"
}记录 task_id:abc123-def456-ghi789
Windows 用户注意
Windows CMD 不支持单引号,需要修改为双引号,并转义内部双引号:
curl -X POST https://api.your-domain.com/api/v1/services/aigc/text2image/image-synthesis ^
-H "X-DashScope-Async: enable" ^
-H "Authorization: Bearer %DASHSCOPE_API_KEY%" ^
-H "Content-Type: application/json" ^
-d "{\"model\":\"wanx2.1-t2i-turbo\",\"input\":{\"prompt\":\"一间有着精致窗户的花店,漂亮的木质门,摆放着花朵\"},\"parameters\":{\"size\":\"1024*1024\",\"n\":1}}"或使用 PowerShell(推荐)。
步骤 2:查询生成结果
将以下命令中的 {task_id} 替换为步骤 1 中获取的任务 ID:
curl -X GET https://api.your-domain.com/api/v1/tasks/abc123-def456-ghi789 \
-H "Authorization: Bearer $DASHSCOPE_API_KEY"curl -X GET https://api-intl.your-domain.com/api/v1/tasks/abc123-def456-ghi789 \
-H "Authorization: Bearer $DASHSCOPE_API_KEY"任务进行中:
{
"output": {
"task_status": "RUNNING"
}
}任务完成:
{
"output": {
"task_id": "abc123-def456-ghi789",
"task_status": "SUCCEEDED",
"results": [
{
"url": "https://example.com/generated-image.jpg"
}
]
}
}轮询查询
由于生成时间较长,建议:
- 等待 3-5 秒后首次查询
- 如果返回
RUNNING,等待 2-3 秒后再次查询 - 重复查询直到状态变为
SUCCEEDED或FAILED
cURL 自动化脚本
Bash 脚本示例
创建 generate_image.sh:
#!/bin/bash
# 配置
API_KEY="sk-xxxxxxxxxxxxxxxx"
BASE_URL="https://api.your-domain.com"
PROMPT="一间有着精致窗户的花店,漂亮的木质门,摆放着花朵"
# 步骤 1:创建任务
echo "正在创建生成任务..."
RESPONSE=$(curl -s -X POST "${BASE_URL}/api/v1/services/aigc/text2image/image-synthesis" \
-H 'X-DashScope-Async: enable' \
-H "Authorization: Bearer ${API_KEY}" \
-H 'Content-Type: application/json' \
-d "{
\"model\": \"wanx2.1-t2i-turbo\",
\"input\": {
\"prompt\": \"${PROMPT}\"
},
\"parameters\": {
\"size\": \"1024*1024\",
\"n\": 1
}
}")
# 提取 task_id
TASK_ID=$(echo $RESPONSE | jq -r '.output.task_id')
echo "任务已创建,task_id: ${TASK_ID}"
# 步骤 2:轮询查询结果
echo "正在等待生成完成..."
while true; do
sleep 3
RESULT=$(curl -s -X GET "${BASE_URL}/api/v1/tasks/${TASK_ID}" \
-H "Authorization: Bearer ${API_KEY}")
STATUS=$(echo $RESULT | jq -r '.output.task_status')
echo "当前状态: ${STATUS}"
if [ "$STATUS" = "SUCCEEDED" ]; then
IMAGE_URL=$(echo $RESULT | jq -r '.output.results[0].url')
echo "生成成功!"
echo "图像 URL: ${IMAGE_URL}"
# 下载图像
curl -o generated_image.jpg "$IMAGE_URL"
echo "图像已保存为 generated_image.jpg"
break
elif [ "$STATUS" = "FAILED" ]; then
echo "生成失败!"
echo $RESULT | jq
break
fi
done使用方法:
chmod +x generate_image.sh
./generate_image.shPython 脚本示例
创建 generate_image.py:
import requests
import time
import json
# 配置
API_KEY = "sk-xxxxxxxxxxxxxxxx"
BASE_URL = "https://api.your-domain.com"
PROMPT = "一间有着精致窗户的花店,漂亮的木质门,摆放着花朵"
# 步骤 1:创建任务
print("正在创建生成任务...")
response = requests.post(
f"{BASE_URL}/api/v1/services/aigc/text2image/image-synthesis",
headers={
"X-DashScope-Async": "enable",
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
},
json={
"model": "wanx2.1-t2i-turbo",
"input": {
"prompt": PROMPT
},
"parameters": {
"size": "1024*1024",
"n": 1
}
}
)
data = response.json()
task_id = data["output"]["task_id"]
print(f"任务已创建,task_id: {task_id}")
# 步骤 2:轮询查询结果
print("正在等待生成完成...")
while True:
time.sleep(3)
result = requests.get(
f"{BASE_URL}/api/v1/tasks/{task_id}",
headers={
"Authorization": f"Bearer {API_KEY}"
}
)
data = result.json()
status = data["output"]["task_status"]
print(f"当前状态: {status}")
if status == "SUCCEEDED":
image_url = data["output"]["results"][0]["url"]
print(f"生成成功!")
print(f"图像 URL: {image_url}")
# 下载图像
image_data = requests.get(image_url).content
with open("generated_image.jpg", "wb") as f:
f.write(image_data)
print("图像已保存为 generated_image.jpg")
break
elif status == "FAILED":
print("生成失败!")
print(json.dumps(data, indent=2))
break使用方法:
python generate_image.py常见问题
Q1:Postman 报 401 认证错误?
错误信息:
{
"code": "InvalidApiKey",
"message": "Invalid API-key provided"
}可能原因:
- ❌ API Key 错误或已过期
- ❌ Authorization 格式不正确
- ❌ 未添加
Bearer前缀
解决方案:
✅ 检查 Authorization 格式:
正确:Bearer sk-xxxxxxxxxxxxxxxx
错误:sk-xxxxxxxxxxxxxxxx
错误:Bearer: sk-xxxxxxxxxxxxxxxx✅ 重新生成 API Key:
- 前往海鲸AI控制台
- 删除旧的 API Key
- 生成新的 API Key
- 更新 Postman/cURL 配置
Q2:查询结果一直是 RUNNING 状态?
原因:
- 生成任务正在进行中(正常情况)
- 服务器负载较高,处理时间延长
解决方案:
✅ 继续等待并轮询:
- 文生图:通常 10-30 秒
- 文生视频:通常 3-10 分钟
✅ 增加查询间隔:
# 从 2 秒增加到 5 秒
sleep 5✅ 设置超时时间:
import time
max_wait_time = 300 # 5分钟
start_time = time.time()
while True:
if time.time() - start_time > max_wait_time:
print("超时!任务可能失败")
break
# 查询逻辑...Q3:如何批量生成多张图片?
方法一:增加 n 参数
{
"model": "wanx2.1-t2i-turbo",
"input": {
"prompt": "可爱的小猫"
},
"parameters": {
"size": "1024*1024",
"n": 4 // 一次生成4张
}
}方法二:并发多个任务
import concurrent.futures
prompts = [
"可爱的小猫",
"美丽的风景",
"科幻城市"
]
def generate_image(prompt):
# 创建任务并查询结果的完整逻辑
pass
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
futures = [executor.submit(generate_image, p) for p in prompts]
for future in concurrent.futures.as_completed(futures):
result = future.result()
print(result)Q4:生成的图像 URL 打不开?
可能原因:
- ❌ URL 已过期(24小时有效期)
- ❌ 网络问题或防火墙限制
- ❌ 任务实际失败但误判为成功
解决方案:
✅ 检查 URL 有效期:
from datetime import datetime, timedelta
url_expire_time = datetime.now() + timedelta(hours=24)
print(f"URL 将在 {url_expire_time} 过期")✅ 立即下载保存:
curl -o image.jpg "https://example.com/image.jpg"✅ 检查任务状态:
{
"output": {
"task_status": "SUCCEEDED", // 确认是 SUCCEEDED
"task_metrics": {
"SUCCEEDED": 1, // 确认成功数量
"FAILED": 0
}
}
}Q5:如何优化生成质量?
提示词优化
❌ 不好的提示词:
一只猫✅ 好的提示词:
一只可爱的橘色小猫,蓝色的大眼睛,毛茸茸的,
坐在窗台上,阳光洒在身上,温暖的氛围,
高清摄影,柔和的光线,景深效果参数优化
使用更高质量的模型:
| 模型 | 速度 | 质量 | 成本 |
|---|---|---|---|
wanx2.1-t2i-turbo | ⭐⭐⭐ | ⭐⭐ | 低 |
wanx2.1-t2i-plus | ⭐⭐ | ⭐⭐⭐ | 中 |
wanx2.1-t2i-pro | ⭐ | ⭐⭐⭐⭐⭐ | 高 |
调整尺寸:
{
"parameters": {
"size": "1280*1280", // 更大的尺寸
"n": 1
}
}最佳实践
1. 错误处理
完整的错误处理示例:
import requests
import time
def generate_image_with_retry(prompt, max_retries=3):
"""带重试的图像生成"""
for attempt in range(max_retries):
try:
# 创建任务
response = requests.post(
f"{BASE_URL}/api/v1/services/aigc/text2image/image-synthesis",
headers=headers,
json=payload,
timeout=30
)
response.raise_for_status()
task_id = response.json()["output"]["task_id"]
# 查询结果
for _ in range(60): # 最多查询60次
time.sleep(3)
result = requests.get(
f"{BASE_URL}/api/v1/tasks/{task_id}",
headers=headers,
timeout=10
)
result.raise_for_status()
data = result.json()
status = data["output"]["task_status"]
if status == "SUCCEEDED":
return data["output"]["results"][0]["url"]
elif status == "FAILED":
raise Exception(f"任务失败: {data}")
raise Exception("查询超时")
except Exception as e:
print(f"尝试 {attempt + 1} 失败: {e}")
if attempt == max_retries - 1:
raise
time.sleep(5) # 重试前等待2. 性能优化
使用连接池:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# 创建会话
session = requests.Session()
# 配置重试策略
retry = Retry(
total=3,
backoff_factor=1,
status_forcelist=[500, 502, 503, 504]
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
# 使用会话发送请求
response = session.post(url, headers=headers, json=payload)并发控制:
from concurrent.futures import ThreadPoolExecutor
import asyncio
# 限制并发数
MAX_CONCURRENT = 5
async def generate_batch(prompts):
with ThreadPoolExecutor(max_workers=MAX_CONCURRENT) as executor:
futures = [executor.submit(generate_image, p) for p in prompts]
results = [f.result() for f in futures]
return results3. 日志记录
详细的日志记录:
import logging
from datetime import datetime
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('image_generation.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
def generate_image(prompt):
logger.info(f"开始生成图像,提示词: {prompt}")
try:
# 创建任务
logger.info("正在创建任务...")
response = create_task(prompt)
task_id = response["task_id"]
logger.info(f"任务已创建: {task_id}")
# 查询结果
logger.info("正在查询结果...")
result = poll_result(task_id)
logger.info(f"生成成功: {result['url']}")
return result
except Exception as e:
logger.error(f"生成失败: {e}", exc_info=True)
raise相关资源
推荐阅读
其他开发工具
| 工具 | 类型 | 适用场景 | 文档链接 |
|---|---|---|---|
| Postman/cURL | API测试 | 快速测试、接口调试 | 本文档 |
| Dify | 低代码平台 | 可视化应用开发 | 查看 |
| Cline | VSCode插件 | 代码开发 | 查看 |
| Claude Code | 命令行 | 终端开发 | 查看 |
技术支持
| 支持渠道 | 响应时间 | 联系方式 |
|---|---|---|
| 📖 文档中心 | 即时 | 查看文档 |
| 💬 在线客服 | 工作日 9:00-18:00 | 联系客服 |
| 📧 邮件支持 | 24小时内 | support@atalk-ai.com |
| 🐛 问题反馈 | 48小时内 | 提交反馈 |
外部资源
更新日志
2025-11-27
- ✨ 新增完整的 Postman 和 cURL 教程
- 📝 完善异步调用机制说明
- 🔧 优化错误处理和最佳实践
- 📖 增加自动化脚本示例
- 🐛 修复常见问题解答
2025-10-15
- 🎉 初始版本发布