我需要发布很多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)。有一个简单的方法吗?
谢谢!
答案 0 :(得分:1)
在YAML中,您可以使用换行符和反斜杠在双引号字符串中忽略它们:
body: "param1=value1&\
param2=value2&\
param3=value3"
通常情况下,换行符将转换为空格,但反斜杠会阻止它,并且这些行将连接在一起而不会有空格。
编辑: 另一种方法是在使用jinja2过滤器之前存储变量:
vars:
query:
- param1=value1
- param2=value2
- param3=value3
...
body: "{{ query | join('&') }}"