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

Ansible uri模块中HTTP LIST方法的Python等效实现及使用问题

实现自定义HTTP LIST方法的Python调用

问题背景

Ansible的ansible.builtin.uri模块支持直接指定自定义HTTP方法(比如LIST),但Python的requests库仅为标准HTTP方法提供了快捷调用(如requests.get()、requests.post()),直接使用requests.list()会报错“list不是请求方法”。

解决方案

对于自定义HTTP方法,可通过requests的通用request()方法实现,或者使用更底层的HTTP客户端库发送请求。

方法1:使用requests.request()(推荐)

requests.request()方法支持传入任意自定义HTTP方法名称,完全匹配Ansible uri模块的逻辑:

import requests

# 替换为实际的Vault URL
vault_url = "https://your-vault-url"

# 发送LIST请求,对应Ansible中的配置
response = requests.request(
    method='LIST',
    url=vault_url,
    headers={'Content-Type': 'application/json'}  # 对应body_format: json
)

# 模拟Ansible的register变量,存储响应结果
list_url = {
    'content': response.text,
    'json': response.json(),
    'status_code': response.status_code
}

如果需要处理认证(比如Vault的Token),只需添加headers参数:

response = requests.request(
    method='LIST',
    url=vault_url,
    headers={
        'Content-Type': 'application/json',
        'X-Vault-Token': 'your-vault-token'
    }
)

方法2:使用urllib3(底层实现)

如果需要更精细化的控制,可使用urllib3直接发送请求:

import urllib3
import json

http = urllib3.PoolManager()
response = http.request(
    'LIST',
    vault_url,
    headers={'Content-Type': 'application/json'}
)

# 解析响应内容
list_content = response.data.decode('utf-8')
list_json = json.loads(list_content)

关键说明

  • Ansible的uri模块本质上封装了底层HTTP客户端,天然支持自定义方法;而requests的快捷函数仅覆盖标准HTTP方法,通用request()方法才是处理自定义方法的正确方式。
  • Ansible中的body_format: json对应Python中设置Content-Type: application/json请求头,若需要发送JSON体,可添加json={"param": "value"}参数。

内容的提问来源于stack exchange,提问作者Sukh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:42:42