如何使用 XProc 的 p:http 请求发送 multipart/form-data POST 请求
How to sent a multipart/form-data POST request with XProc's p:http-request
我想通过 XProc 的 p:http-request
函数使用 multipart/form-data
POST 请求发送文档;需要多部分,因为还有一些表单字段也需要发送。
我只是无法将文件的内容(在我的例子中是 XSD 文件)放入请求中。
知道如何实现这个吗?
在 OxygenXML v23.1 中使用 xmlcalabash
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:input port="source" primary="true">
<p:document href="my.xsd"/>
</p:input>
<p:output port="result" primary="true"/>
<p:http-request>
<p:input port="source">
<p:inline>
<c:request href="https://myserver" method="post">
<c:multipart content-type="multipart/form-data" boundary="----12345678">
<c:body content-type="application/xml" disposition='form-data; name="xsd"; filename="myfile.xsd"'>
XXXX what do do here XXXX
</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg1"'>4</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg2"'>on</c:body>
</c:multipart>
</c:request>
</p:inline>
</p:input>
</p:http-request>
</p:declare-step>
您可能希望使用 p:template
步骤将 XML 内容插入 HTTP 请求正文。
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:output port="result" primary="true"/>
<p:template>
<p:input port="parameters"><p:empty/></p:input>
<p:input port="source">
<p:document href="my.xsd"/>
</p:input>
<p:input port="template">
<p:inline>
<c:request href="https://myserver" method="post">
<c:multipart content-type="multipart/form-data" boundary="----12345678">
<c:body content-type="application/xml" disposition='form-data; name="xsd"; filename="myfile.xsd"'>
{/*}<!-- reference to the root element of the 'source' doc -->
</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg1"'>4</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg2"'>on</c:body>
</c:multipart>
</c:request>
</p:inline>
</p:input>
</p:template>
<p:http-request/>
</p:declare-step>
我想通过 XProc 的 p:http-request
函数使用 multipart/form-data
POST 请求发送文档;需要多部分,因为还有一些表单字段也需要发送。
我只是无法将文件的内容(在我的例子中是 XSD 文件)放入请求中。
知道如何实现这个吗?
在 OxygenXML v23.1 中使用 xmlcalabash
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:input port="source" primary="true">
<p:document href="my.xsd"/>
</p:input>
<p:output port="result" primary="true"/>
<p:http-request>
<p:input port="source">
<p:inline>
<c:request href="https://myserver" method="post">
<c:multipart content-type="multipart/form-data" boundary="----12345678">
<c:body content-type="application/xml" disposition='form-data; name="xsd"; filename="myfile.xsd"'>
XXXX what do do here XXXX
</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg1"'>4</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg2"'>on</c:body>
</c:multipart>
</c:request>
</p:inline>
</p:input>
</p:http-request>
</p:declare-step>
您可能希望使用 p:template
步骤将 XML 内容插入 HTTP 请求正文。
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:output port="result" primary="true"/>
<p:template>
<p:input port="parameters"><p:empty/></p:input>
<p:input port="source">
<p:document href="my.xsd"/>
</p:input>
<p:input port="template">
<p:inline>
<c:request href="https://myserver" method="post">
<c:multipart content-type="multipart/form-data" boundary="----12345678">
<c:body content-type="application/xml" disposition='form-data; name="xsd"; filename="myfile.xsd"'>
{/*}<!-- reference to the root element of the 'source' doc -->
</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg1"'>4</c:body>
<c:body content-type="plain/text" disposition='form-data; name="arg2"'>on</c:body>
</c:multipart>
</c:request>
</p:inline>
</p:input>
</p:template>
<p:http-request/>
</p:declare-step>