在Foundry中复刻Python POST请求遇403错误,如何正确传API密钥?
问题
原本可通过Python发送带x-api-key请求头的POST请求访问https://api-query.de/queryapi/v2/searchingjson/name端点提取JSON数据,但在Foundry中创建自定义数据连接及同步任务时,返回403 Forbidden错误,怀疑API密钥传递方式有误,尝试在同步中添加未加密的可选API密钥请求头后无效。
Python请求代码
headers = { "x-api-key": "xxx", } json_data = { "limit": 2000, "timePeriod": 24, } response = requests.post('https://api-query.de/queryapi/v2/searchingjson/name', headers=headers, json=json_data)
Foundry自定义数据连接YAML配置
type: magritte-rest-v2 sourceMap: my_api: type: magritte-rest-auth-call-source url: https://api-query.de/ headers: x-api-key: '{{x_api_key}}' authCalls: - type: magritte-rest-call path: /queryapi/v2/searchingjson/name method: POST extractor: - type: magritte-rest-json-extractor
错误信息
ServiceException: CUSTOM_CLIENT (MagritteRestSource:InvalidResponseStatus): {responseCode=403, validCodes=[200, 201, 204], response={"message":"Forbidden"}, filename=[hidden]#2023-01-20T11_06_14.182265Z}
可行解决办法
- 加密存储并正确引用API密钥:Foundry中敏感凭证不能用未加密方式传递,需先将
x_api_key存入Foundry凭证服务,确保配置里的{{x_api_key}}能关联到加密存储的密钥。 - 补充POST请求的JSON请求体:当前YAML配置未包含Python请求里的
json_data参数,这会导致请求不完整触发403。需在magritte-rest-call节点下添加请求体配置:body: | { "limit": 2000, "timePeriod": 24 } - 调整请求头的配置位置:尝试将
x-api-key头从全局headers移到具体的authCalls节点下,确保请求发送时能正确携带:authCalls: - type: magritte-rest-call path: /queryapi/v2/searchingjson/name method: POST headers: x-api-key: '{{x_api_key}}' body: | { "limit": 2000, "timePeriod": 24 } extractor: - type: magritte-rest-json-extractor - 检查请求完整性:用Foundry的「测试连接」功能查看实际发送的请求详情(包括请求头、请求体),对比Python请求的差异,确认是否有遗漏参数。
- 验证API的IP权限:确认Foundry集群的IP在目标API的白名单内,部分API会限制请求来源IP,未授权IP会返回403。
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

