HTTP Request Connector(二)

POST请求中发送表单参数

为了在POST请求中发送参数,Mule消息的有效负载应(payload)该是一个带有要发送的参数的名称和值的映射。因此,在您的请求中发送表单参数的一种方法是在HTTP请求连接器之前添加一个Set payload元素,以便将消息的payload设置为发送的表单参数:


例如,如果您使用Set payload元素来设置您的payload:

set_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编辑器添加自定义参数

HTTP请求连接器允许您包含以下类型的参数:
  • Query params

  • A map of multiple query params

  • URI params

  • A map of multiple URI params

  • Headers

  • A map of multiple headers

此外,还可以在Mule消息有效负载中发送表单参数,包括在Mule消息负载中。您还可以在您的请求中添加附件,通过添加附件处理器到您的流中。

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.

query-param和query-params元素可以组合在请求构建器中,每个请求的参数解析(在当前消息上下文中评估所有的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="#[{'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。

URI Parameters

当参数应该是路径的一部分时,可以在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表达式来设置:

注意:
如果您在path字段中输入值时,会自动添加额外的uri-param参数,删除这些参数,因为它们是由动态uri-params字段所处理的。
对于本例,您需要创建一个名为customMap的变量。如果你将这个变量设置为mel表达式#[{“p1”:“v1”,“p2”:“v2”}],它生成一个GET请求到http://www.example.com/test/v1/v2。
与查询参数一样,uri-param和uri-params元素可以在连接器内组合。

它们被解析为每个请求(在当前消息上下文中评估所有的MEL表达式),并且在请求构建器中指定它们。这允许您在必要时覆盖参数。如果相同的参数定义不止一次,则使用最新的值。

在任何情况下,在引用URI参数的路径中使用的占位符都应该与请求构建器中URI参数的名称相匹配(在所有的MEL表达式都被评估之后)

Headers
您可以像查询参数一样轻松地将HTTP头添加到请求中。

这执行一个GET请求到http://www.example.com/test,添加以下标题:

1

2

HeaderName1: HeaderValue1

HeaderName2: HeaderValue2


这与通过属性转换器在Mule消息中设置出站属性完全相同。出站属性在请求中映射为HTTP报头。因此,您可以通过在HTTP请求连接器之前添加两个属性转换器来实现相同的功能,一个用于每个需要设置的新标题


在这两种情况下,响应映射的头部都是在处理完响应后的Mule消息的入站属性。

动态设置标题
如果标题必须动态设置(例如,在设计时您不知道请求中需要多少额外的headers),它们可以通过一个返回一个标题映射的MEL表达式来设置。

对于上面的示例,您首先需要生成一个名为customMap的变量。如果你将这个变量设置为下面的mel表达式:

#[{'TestHeader':'TestValue'}]

它生成一个GET请求到http://www.example.com/test,添加以下header:

TestHeader: TestValue

就像查询参数一样,头headerheaders元素可以在连接器中组合。它们为每个请求解析(在当前消息上下文中评估所有的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”; 就像在用户提交了带有这两个值的表单之后,浏览器会发送请求一样。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值