如何使用 multipart/form-data 在 curl 中发送内联 xml
How to send inline xml in curl with multipart/form-data
我需要使用 curl 发送一些内联 xml 作为 multipart/form-data 请求中的值。
更准确地说,我使用 ansible shell 来 运行 这个卷曲。我有一个问题,发送请求时出现错误,找不到某些客户端证书。
couldn't open file "?xml version=1.0 encoding=UTF-8?>
<eventPublisher name=EmailPublisher processing=enable
statistics=disable trace=disable
xmlns=http://wso2.org/carbon/eventpublisher>
<from streamName=id_gov_notify_stream version=1.0.0/>
<mapping
XML 我正在尝试发送:
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="EmailPublisher" processing="enable"
statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="id_gov_notify_stream" version="1.0.0"/>
<mapping customMapping="enable" type="text">
<inline>{{body}}</inline>
</mapping>
<to eventAdapterType="email">
<property name="email.subject">{{subject}}</property>
<property name="email.address">{{send-to}}</property>
<property name="email.type">{{content-type}}</property>
</to>
</eventPublisher>
Ansible 中的 curl 请求:
'curl --location --request POST https://*** --header "Accept:
application/json" --header "Content-Type: multipart/form-data" --
user admin@{{ domain}}@{{domain}}:{{ pass }} -F "resourceFile=
{{lookup("file", "file.xml")}}" -F "fileName=EmailPublisher"'
以某种方式删除了 resourceFile 键的第一个字符。如何转义或修复 < 将随请求一起发送?
顺便说一句,我使用 curl 因为自 ansible 2.10 以来 uri 模块支持表单数据,我使用 2.9 版本。
并不是说“删除了第一个字符”,而是 -F alpha=<filename
是 curl 在 <
之后解释 "read the form data field alpha
from the filename" 的方式,就像在 shell 重定向中一样。
您可能想使用 --form-string
,因为它不会使前导 <
变得神奇
您还需要使用 '
作为 shell 引用,或者让 ansible 为您引用 XML,因为您 had 是 -F x="<?xml version="1.0" encoding="UTF-8"?>"
可以看出这是不合法的 shell
--form-string resourceFile={{ lookup("file", "file.xml") | quote }}
或
--form-string 'resourceFile={{ lookup("file", "file.xml") }}'
如果您 100% 肯定文件本身永远不会包含 '
。显然第一种形式更安全,因为它没有做这样的假设
我需要使用 curl 发送一些内联 xml 作为 multipart/form-data 请求中的值。 更准确地说,我使用 ansible shell 来 运行 这个卷曲。我有一个问题,发送请求时出现错误,找不到某些客户端证书。
couldn't open file "?xml version=1.0 encoding=UTF-8?>
<eventPublisher name=EmailPublisher processing=enable
statistics=disable trace=disable
xmlns=http://wso2.org/carbon/eventpublisher>
<from streamName=id_gov_notify_stream version=1.0.0/>
<mapping
XML 我正在尝试发送:
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="EmailPublisher" processing="enable"
statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="id_gov_notify_stream" version="1.0.0"/>
<mapping customMapping="enable" type="text">
<inline>{{body}}</inline>
</mapping>
<to eventAdapterType="email">
<property name="email.subject">{{subject}}</property>
<property name="email.address">{{send-to}}</property>
<property name="email.type">{{content-type}}</property>
</to>
</eventPublisher>
Ansible 中的 curl 请求:
'curl --location --request POST https://*** --header "Accept:
application/json" --header "Content-Type: multipart/form-data" --
user admin@{{ domain}}@{{domain}}:{{ pass }} -F "resourceFile=
{{lookup("file", "file.xml")}}" -F "fileName=EmailPublisher"'
以某种方式删除了 resourceFile 键的第一个字符。如何转义或修复 < 将随请求一起发送?
顺便说一句,我使用 curl 因为自 ansible 2.10 以来 uri 模块支持表单数据,我使用 2.9 版本。
并不是说“删除了第一个字符”,而是 -F alpha=<filename
是 curl 在 <
之后解释 "read the form data field alpha
from the filename" 的方式,就像在 shell 重定向中一样。
您可能想使用 --form-string
,因为它不会使前导 <
变得神奇
您还需要使用 '
作为 shell 引用,或者让 ansible 为您引用 XML,因为您 had 是 -F x="<?xml version="1.0" encoding="UTF-8"?>"
可以看出这是不合法的 shell
--form-string resourceFile={{ lookup("file", "file.xml") | quote }}
或
--form-string 'resourceFile={{ lookup("file", "file.xml") }}'
如果您 100% 肯定文件本身永远不会包含 '
。显然第一种形式更安全,因为它没有做这样的假设