将 curl 转换为 Ansible
curl2code 使用 uri 模块将 curl 命令转换为 Ansible playbook 任务。转换过程通过 WebAssembly 在您的浏览器中运行,以确保完全的隐私。对于 Python,请查看我们的 curl 转 Python 转换器。对于 PowerShell,请参阅 curl 转 PowerShell。下方是实用的 Ansible 示例。
如何从浏览器复制 curl
- 1
打开开发者工具
按 F12 或 Ctrl+Shift+I 打开浏览器开发者工具。
- 2
进入 Network 标签页
点击 Network (网络) 标签页,并执行触发 HTTP 请求的操作。
- 3
复制为 cURL
右键点击请求 → Copy (复制) → Copy as cURL (复制为 cURL)。然后将其粘贴到上方。
常见问题解答
什么是 Ansible uri 模块?
uri 模块是 Ansible 内置的用于在 playbook 中发起 HTTP 请求的模块。它处理 GET、POST、PUT、DELETE,支持 JSON 主体、身份验证和状态码验证。无需额外集合 —— 它是 ansible.builtin 的一部分。curl2code 使用 uri 模块生成 Ansible 任务 YAML。
uri 模块 vs get_url vs 带有 curl 的 command — 该使用哪一个?
uri 模块用于 API 调用 —— 它返回解析后的 JSON 并验证状态。get_url 用于将文件下载到磁盘。command: curl 是一种反模式 —— 会失去幂等性和错误处理能力。始终优先选择 uri 进行 HTTP API 交互。对于 Python 自动化,请参阅 curl 转 Python。
如何在 Ansible 中处理身份验证?
对于 Bearer:headers: { Authorization: "Bearer {{ token }}" }。对于 Basic 认证:使用 url_username 和 url_password 参数。使用 Ansible Vault 存储机密:ansible-vault encrypt_string。uri 模块还支持 force_basic_auth: yes 进行抢占式认证。
如何在 Ansible 中发送表单数据?
对于 JSON 主体:body: {{ data | to_json }} 配合 body_format: json。对于 form-urlencoded:body_format: form-urlencoded 配合 body: key=value&key2=value2。多部分文件上传需要 community.general.uri 模块或自定义脚本。curl2code 处理 -F 转换。
如何在 Ansible HTTP 任务中处理错误?
使用 register: result 配合 failed_when: result.status != 200 设置自定义失败条件。使用 ignore_errors: yes 在失败时继续执行。uri 模块默认在非 2xx 时失败 —— 使用 status_code: [200, 201, 404] 覆盖以接受多个状态码。
如何在 Ansible 中解析 JSON 响应?
当设置 return_content: yes 时,uri 模块会自动解析 JSON —— 通过 result.json 访问。使用 Jinja2 过滤器:result.json.users | selectattr('active') | list。对于复杂的转换,使用带有过滤器的 set_fact。注册结果以便在后续任务中使用。
如何在 Ansible 中设置超时和重试?
在 uri 任务上设置 timeout: 30 以秒为单位设置请求超时。对于重试:使用 retries: 3、delay: 5 和 until: result.status == 200。这是 Ansible 内置的重试循环模式 —— 无需自定义脚本。适用于任何模块,不仅限于 uri。
如何在 Ansible uri 中使用代理?
在任务上设置环境:environment: { http_proxy: "http://proxy:8080", https_proxy: "http://proxy:8080" }。或者在 ansible.cfg 或 group_vars 中全局设置。uri 模块遵循标准代理环境变量。对于不使用代理的例外:no_proxy: "localhost,.internal"。
如何在 Ansible 中发送带有 JSON 正文的 POST 请求?
使用 curl2code 将类似于 curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL 的 curl POST 命令转换为 Ansible。生成的代码使用 ansible.builtin.uri: url: '{'{ url }'}' method: POST body_format: json body: '{'{ data }'}'。curl2code 会自动检测带有 JSON 内容的 -d/--data 标志,并在 uri 模块代码中设置相应的 Content-Type 请求头。
如何在 Ansible 中添加 Bearer 令牌授权?
将 curl -H "Authorization: Bearer YOUR_TOKEN" URL 传递给 curl2code,它会生成带有认证请求头的 uri 模块代码:headers: Authorization: 'Bearer YOUR_TOKEN'。curl2code 会从 -H "Authorization: Bearer ..." 和 --oauth2-bearer 标志中检测 Bearer 令牌。对于 Basic auth,请使用 -u user:pass。
如何在 Ansible 中设置 Content-Type 请求头?
curl2code 将 curl -H "Content-Type: application/json" URL 转换为带有正确请求头的 uri 模块代码:body_format: json。对于 -d 数据,curl 默认使用 application/x-www-form-urlencoded;对于 -F 表单上传,它使用 multipart/form-data。curl2code 会将每一项映射到正确的 uri 模块 API。