如何在Python 3中执行含oauth2l认证的指定Curl命令?
在Python 3中执行带OAuth2认证的Curl请求
我帮你把这条curl命令转换成Python实现,核心就是先获取OAuth2的认证头部,再发送GET请求到目标API,下面是具体步骤和代码:
1. 依赖准备
首先确保你已经安装了requests库(用来发送HTTP请求),如果没装的话,执行:
pip install requests
2. 代码实现
我们会用subprocess模块调用oauth2l命令获取认证头部,再用requests发送请求并解析JSON结果:
import subprocess import requests import json def get_oauth_header(): # 调用oauth2l命令获取认证头部 try: # 执行命令并捕获输出 result = subprocess.run( ["oauth2l", "header", "--json", "key.json", "mobileinsights"], capture_output=True, text=True, check=True ) # 清理输出,去掉多余的换行和引号(对应原curl命令里的反引号包裹逻辑) header_value = result.stdout.strip().strip('"') # 返回整理后的头部字典 return {"Authorization": header_value} except subprocess.CalledProcessError as e: print(f"获取OAuth头部失败: {e.stderr}") raise def fetch_networks(): api_url = "https://mobileinsights.googleapis.com/v2/networks" headers = get_oauth_header() try: # 发送GET请求 response = requests.get(api_url, headers=headers) # 检查请求是否成功,失败则抛出异常 response.raise_for_status() # 解析JSON结果为Python字典 return response.json() except requests.exceptions.RequestException as e: print(f"请求API失败: {e}") raise # 执行并格式化打印结果 if __name__ == "__main__": networks_data = fetch_networks() print(json.dumps(networks_data, indent=2))
代码说明
subprocess.run():用来执行外部的oauth2l命令,check=True会在命令执行失败时直接抛出异常,capture_output=True可以捕获命令的输出和错误信息,方便排查问题。- 头部处理:把
oauth2l输出的内容整理成requests库需要的字典格式,确保Authorization头部的格式正确。 - 错误处理:分别捕获命令执行失败和HTTP请求失败的场景,避免程序静默崩溃,同时给出明确的错误提示。
- 结果解析:用
response.json()直接把API返回的JSON字符串转换成Python字典,方便后续的业务处理。
内容的提问来源于stack exchange,提问作者LeoL
相关产品推荐
相关产品推荐

