Mule HTTP请求:错误查询参数与大字符串

时间:2016-09-12 13:20:22

标签: php rest http mule mule-component

我使用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>

4 个答案:

答案 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