You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:42:51