调用Fixer.io汇率API仅获200响应码,如何获取实际汇率数据?
Fixer API返回200响应但无汇率数据的问题解决
问题分析
你调用Fixer API获取INR兑USD汇率时,虽然拿到了200的成功响应码,但只打印出<Response [200]>,看不到预期的汇率数据。我看了你的代码,主要有几个关键问题:
- URL参数包含多余空格:请求URL里
access_key = YOUR_ACCESS_KEY、base = INR这类参数间的空格会导致API无法正确解析参数,相当于传递了错误的参数名,自然拿不到有效数据。 - 直接打印Response对象:你打印的是
requests库的Response实例,而非API返回的实际JSON内容,所以只会看到响应状态标识,看不到具体汇率数据。 - 协议使用错误:你用了
http协议,但Fixer官方API地址是https,虽然部分环境下http能跳转,但建议遵循官方规范避免潜在问题。
修正后的代码
下面是修复后的完整代码,我会逐一说明改动点:
import requests def main(): # 修复URL:移除参数间的空格,改用官方https协议 api_url = "https://data.fixer.io/api/latest?access_key=YOUR_ACCESS_KEY&base=INR&symbols=USD" response = requests.get(api_url) if response.status_code != 200: raise Exception("Error: API请求失败,状态码异常") # 解析API返回的JSON数据,转换成Python字典 response_data = response.json() # 额外检查API返回的success字段:即使200,也可能因密钥无效/权限不足返回失败 if not response_data.get("success"): error_details = response_data.get("error", {}) raise Exception(f"API执行失败:{error_details.get('info', '未知错误')}") # 现在可以看到完整的汇率数据了 print(response_data) if __name__ == "__main__": main()
关键改动说明
- 清理URL参数:去掉参数名和值之间的空格,比如把
access_key = YOUR_ACCESS_KEY改成access_key=YOUR_ACCESS_KEY,确保API能正确识别请求参数。 - 解析JSON响应:用
response.json()把API返回的JSON字符串转为Python字典,这样就能访问里面的rates、base等核心字段。 - 增加success字段校验:很多API即使返回200,也会通过
success字段标记请求是否真正成功(比如密钥无效、无权限修改base货币),加这个判断能帮你快速定位权限类问题。 - 替换为https协议:遵循官方文档的地址规范,避免协议不兼容导致的潜在问题。
额外提醒
如果使用的是Fixer免费版,注意免费套餐默认不允许修改base参数(默认base是EUR)。这时候你可以调整请求逻辑:先获取INR兑EUR的汇率,再获取USD兑EUR的汇率,手动计算INR兑USD的比值;或者升级到付费套餐解锁自定义base货币的权限。
内容的提问来源于stack exchange,提问作者R.K.Guleria
相关产品推荐
相关产品推荐

