OpenClaw实为误传,正确框架是OpenHands;其通过Action→Runtime→沙箱API三层链路调用第三方服务,需配置host.docker.internal映射、域名白名单及secrets.json密钥管理。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw本身不是官方项目,当前主流开源AI Agent平台中并无名为“OpenClaw”的成熟框架;你实际想问的极可能是OpenHands——该平台广泛被误称为OpenClaw(因名称相近、社区口误传播)。以下所有操作均基于真实可验证的 OpenHands v0.45+ 官方实现路径,适配2026年7月最新稳定版。
确认服务调用前提
OpenHands不直接“调用第三方服务”,而是通过Agent执行Action → Runtime执行命令 → 沙箱内调用外部API三层链路完成。第一步必须确保沙箱容器能访问目标服务网络。
启动容器时必须挂载宿主机 Docker Socket 并启用 host.docker.internal 映射:否则 runtime 无法从容器内解析宿主机 localhost 或调用本地运行的 FastAPI/Flask 服务。
【关键前提】若第三方服务部署在宿主机(如 http://localhost:8000),必须在 docker run 命令中加入 --add-host host.docker.internal:host-gateway,否则沙箱内请求将超时失败。
在任务中触发 HTTP 请求
OpenHands 不提供原生 HTTP Action,需通过 run 动作在沙箱中执行 curl 或 Python 脚本调用。
方法一:用 curl 直接发 GET 请求
在 Web UI 的聊天框输入:
“调用 http://host.docker.internal:8000/api/v1/status 获取状态”
Agent 将自动拆解为 run action:curl -s http://host.docker.internal:8000/api/v1/status
方法二:写 Python 脚本发 POST 请求
先用 write action 创建脚本:
write path="/workspace/call_api.py" content="import requests\nres = requests.post('http://host.docker.internal:8000/api/v1/submit', json={'task': 'test'}, timeout=10)\nprint(res.text)"
再用 run action 执行:run command="python /workspace/call_api.py"
配置可信域名白名单(防沙箱拦截)
OpenHands 默认禁止沙箱访问除 localhost/host.docker.internal 外的任意域名。
若需调用 https://api.github.com 这类公网服务,必须在启动容器时注入环境变量:
-e SANDBOX_WHITELIST_DOMAINS="api.github.com,api.openai.com"
多个域名用英文逗号分隔,不加协议头、不加端口、不加路径,只写纯域名。
未配置时发出的请求会被沙箱内 iptables DROP,返回空响应且无错误日志,极易误判为服务宕机。
对接认证型第三方服务
第一步:把 API Key 写入沙箱安全文件
使用 write action 将密钥存入 /workspace/secrets.json,内容格式为:{"github_token": "ghp_xxx", "notion_key": "secret_xxx"}
第二步:Python 脚本读取并构造 Authorization Header
Agent 会自动识别 secrets.json 路径并加载,但必须显式在代码中读取:
import json<br>with open('/workspace/secrets.json') as f:<br> keys = json.load(f)<br>headers = {'Authorization': f'Bearer {keys["github_token"]}'}
第三步:发起带认证的请求
务必使用 requests 库而非 curl,curl 无法动态拼接 header 字符串;requests 可安全注入变量,避免硬编码泄露风险。


















