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
相关产品推荐
相关产品推荐

