带环境变量的curl可正常运行 转Python3 requests后报403错误
报错原因
- 凭证传值完全错误:原curl命令里的
$TOKEN是Shell的环境变量引用写法,终端执行curl时会自动把这个占位符替换成你提前配置好的有效token值;但Python代码没有Shell的变量解析能力,你直接把'$TOKEN'当普通字符串传进参数,实际发出去的请求带的token就是字面上的"$TOKEN",属于完全无效的凭证,直接被接口拦截返回403。 - 访问协议不匹配:你在代码里写的是
http://开头的明文地址,ipinfo的正式服务默认走HTTPS,明文http请求要么触发服务端拦截规则,要么在自动重定向到HTTPS的过程中丢失携带的参数,也会触发403错误。
修复方法
- 用os模块从系统环境变量里读取真实的TOKEN值,替换硬编码的
$TOKEN占位符 - 把请求地址改成HTTPS协议,和原curl的访问路径保持一致
- 调整打印内容,直接输出响应状态和返回体,后续排查问题更方便
修正后的可运行代码:
#!/usr/bin/env python3 import os import requests def getIPInfo (): # 读取系统环境变量中存储的真实TOKEN token = os.getenv("TOKEN") if not token: print("未获取到环境变量中的TOKEN值,请检查环境配置") return params = ( ('token', token), ) # 使用HTTPS协议访问接口 response = requests.get('https://ipinfo.io/8.8.8.8/json', params=params) print(f"响应状态:{response.status_code}") print(f"返回内容:{response.text}") getIPInfo()
注意:如果你的token是手动配置在脚本内的,直接把真实的token字符串赋值给变量即可,不要保留
$符号,否则依然会传无效值。
内容的提问来源于stack exchange,提问作者jrz
相关产品推荐
相关产品推荐

