我使用query-param从Mule HTTP Request调用REST(PHP)。
这样可以正常使用小型参数数据!
但其中一个参数(" rest_data")是一个内容文件(Base64编码)。当文件内容很大(> ~8K)时,请求失败。我认为params不支持大字符串。
在这种情况下,在Mule上使用正文而不是 query-param 的方法是什么?
请参阅配置文件:
<http:request-config name="HTTP_Request_Configuration" host="164.164.164.233" port="80" basePath="/crmtec/service/v4_1/rest.php" doc:name="HTTP Request Configuration">
</http:request-config>
<http:request config-ref="HTTP_Request_Configuration" path="/" method="POST" doc:name="HTTP Documento">
<http:request-builder>
<http:query-param paramName="method" value="set_document_revisions"/>
<http:query-param paramName="input_type" value="JSON"/>
<http:query-param paramName="response_type" value="JSON"/>
<http:query-param paramName="rest_data" value="#[flowVars.params.rest_data]"/>
</http:request-builder>
<http:success-status-code-validator values="0..599"/>
</http:request>
答案 0 :(得分:0)
有效负载中的任何内容都将在HTTP请求的正文中发送,因此您应该在set-payload
组件之前使用http:request
组件将该rest_data添加到有效负载中:
<set-payload value="#[flowVars.params.rest_data**]"/>
对大数据使用查询参数不是一个好习惯,这就是它失败的原因。
答案 1 :(得分:0)
我在调用GIS REST API时遇到了类似的问题。试试下面的代码。对于发布请求,您可以将有效负载作为所有参数的MAP。精心设计的REST应该能够处理它 -
<set-payload value='#[{'method':'set_document_revisions', 'input_type':'JSON', 'response_type':'JSON','rest_data':flowVars.params.rest_data}]' />
<http:request config-ref="HTTP_Request_Configuration" path="/" method="POST" doc:name="HTTP Documento">
<http:success-status-code-validator values="0..599"/>
</http:request>
答案 2 :(得分:0)
我们应该使用POST方法而不是GET来通过HTTP发送大型数据结构
答案 3 :(得分:0)
当您查询参数很长时,您会考虑将查询字符串放入HTTP请求正文中,将请求类型设置为POST方法而不是GET。
以下是网页列表中网址数量的限制:https://boutell.com/newfaq/misc/urllength.html
请记住,查询字符串(名称/值对)在GET请求的URL
中进行转换
GET /something/?name1=value1&name2=value2 HTTP/1.1 Host: yourhost
POST /something/ HTTP/1.1 Host: yourhost name1=value1&name2=value2