在POST请求中发送表单参数
为了在POST请求中发送参数,Mule消息的有效负载应(payload)该是一个带有要发送的参数的名称和值的映射。因此,在您的请求中发送表单参数的一种方法是在HTTP请求连接器之前添加一个Set payload元素,以便将消息的payload设置为发送的表单参数:
例如,如果您使用Set payload元素来设置您的payload:
#[{'key1':'value1', 'key2':'value2'}]
一个POST请求发送到http://www.example.com/test,Content-type:application/ x-www-form-urlencoded,和body“key1 = value1&key2 = value2”;
就像在用户提交了带有这两个值的表单之后,浏览器会发送请求一样。
使用Studio XML编辑器添加自定义参数
-
Query params
-
A map of multiple query params
-
URI params
-
A map of multiple URI params
-
Headers
-
A map of multiple headers
Query Parameters
您可以通过在请求中使用request-builder元素来添加查询参数:<http:request-config name="HTTP_Request_Configuration" host="example.com" port="8081" doc:name="HTTP_Request_Configuration"/> <flow name="test_flow"> <http:request config-ref="HTTP_Request_Configuration" path="test" method="GET"> <http:request-builder> <http:query-param paramName="k1" value="v1" /> <http:query-param paramName="k2" value="v2" /> </http:request-builder> </http:request> </flow>This performs a GET request to
http://www.example.com/test?k1=v1&k2=v2
.
动态设置查询参数Dynamically Setting Query Parameters
如果查询参数应该动态设置(例如,在设计时不知道请求中需要多少查询参数),可以通过一个返回参数映射的MEL表达式来设置它们。<http:request-config name="HTTP_Request_Configuration" host="example.com" port="8081" doc:name="HTTP_Request_Configuration"/> <flow name="test_flow"> <set-variable variableName="customMap" value="#[{'k1':'v1', 'k2':'v2'}]" /> <http:request config-ref="HTTP_Request_Configuration" path="test" method="GET"> <http:request-builder> <http:query-params expression="##[flowVars.customMap]" /> </http:request-builder> </http:request> </flow>这个示例生成与前一个请求相同的请求,一个GET请求
http://www.example.com/test?k1=v1&k2=v2
.<http:request-config name="HTTP_Request_Configuration" host="example.com" port="8081" doc:name="HTTP_Request_Configuration"/> <flow name="test_flow"> <set-variable variableName="customMap" value="#[{'k2':'new', 'k3':'v3'}]" /> <http:request config-ref="HTTP_Request_Configuration" path="test" method="GET"> <http:request-builder> <http:query-param paramName="k1" value="v1" /> <http:query-param paramName="k2" value="v2" /> <http:query-params expression="#[flowVars.customMap]" /> </http:request-builder> </http:request> </flow>在本例中,在映射中定义的参数k2将覆盖前面定义的k2 query-param。结果是一个GET请求到http://www.example.com/test?k1=v1&k2=new&k3=v3。
当参数应该是路径的一部分时,可以在path属性中添加占位符,其中每个参数都有一个名称, 然后,它们必须从请求构建器中引用,以提供值,使用 uri-param 元素 :
1 2 3 4 5 6 7 8 9 10 | <http:request-config name="HTTP_Request_Configuration" host="example.com" port="8081" doc:name="HTTP_Request_Configuration"/> <flow name="test_flow"> <http:request config-ref="HTTP_Request_Configuration" path="/customer/{customerId}" method="GET"> <http:request-builder> <http:uri-param paramName="customerId" value="20" /> </http:request-builder> </http:request> </flow> |
This performs a GET request to http://www.example.com/customer/20
.
动态设置URI参数(Dynamically Setting URI Parameters)
如果要动态设置URI参数,可以通过一个返回一个参数映射的MEL表达式来设置:它们被解析为每个请求(在当前消息上下文中评估所有的MEL表达式),并且在请求构建器中指定它们。这允许您在必要时覆盖参数。如果相同的参数定义不止一次,则使用最新的值。
在任何情况下,在引用URI参数的路径中使用的占位符都应该与请求构建器中URI参数的名称相匹配(在所有的MEL表达式都被评估之后)。
Headers这执行一个GET请求到http://www.example.com/test,添加以下标题:
1 2 | HeaderName1: HeaderValue1 HeaderName2: HeaderValue2 |
这与通过属性转换器在Mule消息中设置出站属性完全相同。出站属性在请求中映射为HTTP报头。因此,您可以通过在HTTP请求连接器之前添加两个属性转换器来实现相同的功能,一个用于每个需要设置的新标题
对于上面的示例,您首先需要生成一个名为customMap的变量。如果你将这个变量设置为下面的mel表达式:
#[{'TestHeader':'TestValue'}]
它生成一个GET请求到http://www.example.com/test,添加以下header:
TestHeader: TestValue
就像查询参数一样,头header和headers元素可以在连接器中组合。它们为每个请求解析(在当前消息上下文中评估所有的MEL表达式),并且在请求构建器中指定它们。这允许在必要时覆盖参数。如果相同的参数定义不止一次,则使用最新的值。
在POST请求中发送表单参数(Sending Form Parameters in a POST Reque)
为了在POST请求中发送参数,Mule消息的有效负载应该是一个带有要发送的参数的名称和值的映射。因此,在您的请求中发送表单参数的一种方法是在HTTP请求连接器之前添加一个Set有效负载元素,以便将消息的有效负载设置为发送的表单参数:
例如,如果您使用Set payload元素来设置您的有payload:
#[{'key1':'value1','key2':'value2'}]
一个POST请求发送到http://www.example.com/test,Content-type:application/x-www-form-urlencoded,和body: “key1 = value1&key2 = value2”; 就像在用户提交了带有这两个值的表单之后,浏览器会发送请求一样。