如何使用Ansible URI模块格式化长POST正文字符串?

时间:2018-01-26 19:27:15

标签: ansible yaml uri ansible-2.x

我需要发布很多POST请求,作为我整理的Ansible剧本的一部分。我使用的是uri模块,需要以x-www-form-urlencoded格式发送带有键/值对的数据,如下面的示例Ansible文档所示:

- uri:
    url: https://your.form.based.auth.example.com/index.php
    method: POST
    body: "name=your_username&password=your_password&enter=Sign%20in"
    status_code: 302
    headers:
      Content-Type: "application/x-www-form-urlencoded"
  register: login

我的问题是我的身体字符串非常长,有些人有20多个参数作为一个大的连续线。我希望能够将参数指定为列表,例如:

body: 
  name: your_username
  password: your_password
  enter: SignIn
  ...

并以相同的格式自动发送结果(x-www-form-urlencoded,而不是JSON)。有一个简单的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

在YAML中,您可以使用换行符和反斜杠在双引号字符串中忽略它们:

body: "param1=value1&\
  param2=value2&\
  param3=value3"

通常情况下,换行符将转换为空格,但反斜杠会阻止它,并且这些行将连接在一起而不会有空格。

编辑: 另一种方法是在使用jinja2过滤器之前存储变量:

vars:
  query:
    - param1=value1
    - param2=value2
    - param3=value3
...
  body: "{{ query | join('&') }}"