| import os, json, datetime, urllib.request, urllib.error |
|
|
| key = os.getenv("ANTHROPIC_API_KEY", "").strip() |
| if not key: |
| print("❌ 未设置 ANTHROPIC_API_KEY") |
| raise SystemExit(1) |
|
|
| print("✅ KEY已设置:", key[:8] + "..." + key[-4:]) |
|
|
| headers = { |
| "x-api-key": key, |
| "anthropic-version": "2023-06-01", |
| "content-type": "application/json", |
| } |
|
|
| |
| msg_payload = { |
| "model": "claude-opus-4-7", |
| "max_tokens": 8, |
| "messages": [{"role": "user", "content": "ping"}] |
| } |
| req = urllib.request.Request( |
| "https://api.anthropic.com/v1/messages", |
| data=json.dumps(msg_payload).encode(), |
| headers=headers, |
| method="POST", |
| ) |
| try: |
| with urllib.request.urlopen(req, timeout=30) as r: |
| body = json.loads(r.read().decode()) |
| print("✅ messages 接口可用") |
| print("usage:", body.get("usage", {})) |
| except urllib.error.HTTPError as e: |
| print("❌ messages 接口失败:", e.code, e.read().decode(errors="ignore")[:500]) |
|
|
| |
| end = datetime.date.today() |
| start = end - datetime.timedelta(days=7) |
| cost_payload = { |
| "starting_at": f"{start.isoformat()}T00:00:00Z", |
| "ending_at": f"{end.isoformat()}T23:59:59Z", |
| "bucket_width": "1d" |
| } |
| req2 = urllib.request.Request( |
| "https://api.anthropic.com/v1/organizations/cost_report", |
| data=json.dumps(cost_payload).encode(), |
| headers=headers, |
| method="POST", |
| ) |
| try: |
| with urllib.request.urlopen(req2, timeout=30) as r: |
| body = json.loads(r.read().decode()) |
| print("✅ cost_report 返回成功") |
| print(json.dumps(body, ensure_ascii=False)[:2000]) |
| except urllib.error.HTTPError as e: |
| print("ℹ️ cost_report 不可用(常见于非管理员key):", e.code, e.read().decode(errors="ignore")[:500]) |
|
|
| |
| models_req = urllib.request.Request( |
| "https://api.anthropic.com/v1/models", |
| headers=headers, |
| method="GET", |
| ) |
| try: |
| with urllib.request.urlopen(models_req, timeout=30) as r: |
| body = json.loads(r.read().decode()) |
| models = body.get("data", []) |
| print(f"✅ models 接口可用,共 {len(models)} 个模型") |
| for m in models[:20]: |
| model_id = m.get("id", "") |
| display_name = m.get("display_name", "") |
| created_at = m.get("created_at", "") |
| print(f"- {model_id} | {display_name} | {created_at}") |
| except urllib.error.HTTPError as e: |
| print("❌ models 接口失败:", e.code, e.read().decode(errors="ignore")[:500]) |
|
|