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

Ansible uri模块是否支持multipart/mixed?如何复现curl请求?

使用Ansible uri模块实现multipart/mixed格式的POST请求

嘿,别着急!Ansible的uri模块完全支持multipart/mixed格式的请求,我来帮你把那条curl命令转换成对应的Playbook配置,一步到位解决问题。

核心结论

是的,uri模块可以完美复现你给出的curl语句,关键是用好form参数处理文件上传,同时配置对应的请求头和方法。

具体Playbook示例

下面的代码直接对应你提供的curl命令,每一行都有明确的对应关系:

- name: 发送multipart/mixed格式的POST请求
  hosts: localhost
  tasks:
    - name: 上传XML和Twb文件到目标服务器
      ansible.builtin.uri:
        # 对应curl里的目标地址
        url: "http://server_address"
        # 对应curl的-X POST
        method: POST
        # 对应curl里的Auth请求头
        headers:
          Auth: "blahblahblah"
        # 可手动指定Content-Type,模块默认会自动处理multipart格式,按需开启
        # content_type: "multipart/mixed"
        # 对应curl里的两个-F参数,@开头表示上传指定文件
        form:
          request_payload: "@{{ playbook_dir }}/pay_file.xml"
          workbook: "@{{ playbook_dir }}/file.twb"
        # 按需设置预期的响应状态码,比如200表示请求成功
        status_code: 200
        # 如果需要获取服务器返回的内容,打开这个选项
        return_content: yes

关键参数说明

  • form参数:这是实现multipart请求的核心,每个键值对对应curl的-F参数。当值以@开头时,Ansible会自动读取对应路径的文件并作为文件上传,和curl的@行为完全一致。你可以用{{ playbook_dir }}基于Playbook所在目录定位文件,也可以换成绝对路径。
  • headers:直接配置curl里的-H请求头即可,这里就是Auth字段。
  • content_type:通常不需要手动指定,因为当form参数包含文件上传时,Ansible会自动生成正确的multipart类型的Content-Type。如果你的服务器强制要求multipart/mixed而非默认的multipart/form-data,再手动加上这个参数。

注意事项

  • 确保Ansible运行时能访问到pay_file.xml和file.twb这两个文件,路径一定要正确,否则会抛出文件不存在的错误。
  • 如果file.twb是二进制文件,不用担心,用@路径的方式Ansible会以二进制模式读取并上传,不会有编码问题。
  • 根据服务器的实际响应调整status_code参数,比如如果服务器返回201表示创建成功,就把值改成201。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:46:43