从Mule ESB发出POST请求

时间:2015-08-12 06:23:44

标签: post mule httprequest

我坚持向Web服务器发送正确的HTTP请求(在PHP下运行)。 我需要发送带有属性var tapRecognizer = UITapGestureRecognizer(target:self, action:"detectTap:") 的POST请求和一些值,例如json

如果我从Postman或cURL提出请求,它会工作,请求看起来像这样

{ "employee_id":191, "date":"2015-08-11", "time":"14:26:00" }

我也可以使用conntent type POST /DeliveryDetails/ HTTP/1.1 Host: 192.168.0.100:80 Cache-Control: no-cache Content-Type: application/x-www-form-urlencoded json=%7B+%22employee_id%22%3A191%2C+%22date%22%3A%222015-08-11%22%2C+%22time%22%3A%2214%3A26%3A00%22+%7D

发送
multipart/form-data

或使用cURL

POST /DeliveryDetails/ HTTP/1.1
Host: 192.168.0.100:80
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="json"

{ "employee_id":191, "date":"2015-08-11", "time":"14:26:00" }
----WebKitFormBoundary7MA4YWxkTrZu0gW

但是,当我尝试向Mule ESB提出请求时,由于请求不正确,它无法正常工作。

流程看起来像这样

curl -d "json={ \"employee_id\":191, \"date\":\"2015-08-11\", \"time\":\"14:26:00\" }" http://192.168.0.100:80/DeliveryDetails/

<sub-flow name="my-flow"> <logger message="Request: #[payload]" level="INFO" doc:name="Log request"/> <http:request config-ref="request-HTTP" path="/DeliveryDetails/" method="POST" doc:name="HTTP call" /> <object-to-string-transformer doc:name="Object to String"/> <logger message="Response: #[payload]" level="INFO" doc:name="Log response"/> </sub-flow> 包含值#[payload] 如果我这样做,那么身体就会包含它(没有像{ "employee_id":191, "date":"2015-08-11", "time":"14:26:00" }那样的其他信息,我认为这就是问题所在。)

我尝试添加Content-Type

query-param

或使用<http:request-builder > <http:query-param paramName="json" value="#[payload]" /> </http:request-builder>

message-properties-transformer

但结果仍然相同。

修改

HTTP配置如下所示

<message-properties-transformer doc:name="Message Properties">
    <add-message-property key="json" value="#[payload]"/>
</message-properties-transformer>

还尝试使用

设置<http:request-config name="request-HTTP" host="192.168.0.100" port="80" doc:name="HTTP Request Configuration" />
Content-Type

<set-property propertyName="Content-Type" value="application/x-www-form-urlencoded" doc:name="Property"/>

但我收到的正文仍为<http:request-builder> <http:query-param paramName="json" value="#[payload]"/> <http:header headerName="Content-Type" value="application/x-www-form-urlencoded"/> </http:request-builder> ,没有其他属性,例如payloadjson=

2 个答案:

答案 0 :(得分:0)

您需要放置path="/DeliveryDetails"

您可以按照以下配置进行操作: -

<http:request-config name="HTTP_Request_Configuration" host="192.168.0.100" port="80"  doc:name="HTTP Request Configuration"/> 

并在Mule流程或子流程中设置 Content-Type ,如下所示: -

<set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
<http:request config-ref="HTTP_Request_Configuration" path="/DeliveryDetails" method="POST" doc:name="HTTP call" />
<logger message="Input JSON message ****** #['\n'+ message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/> 

您可以根据您的要求配置内容类型

您也可以参考: - How do I force the HTTP Request Connector to use a certain Content-Type?

答案 1 :(得分:0)

由于有效负载只是JSON数据,因此在大多数情况下都会发送。你的curl例子设置&#34; json =&#34;身体的一部分。所以这里有几个选项:

  1. 修改有效负载以添加您想要的主体,并将内容类型设置为application/x-www-form-urlencoded
  2. 通过将数据添加为附件来发送多部分内容。在您的情况下,请尝试:
  3. <sub-flow name="my-flow"> <logger message="Request: #[payload]" level="INFO" doc:name="Log request"/> <set-attachment attachmentName="json" value="#[payload]" contentType="application/json"/> <http:request config-ref="request-HTTP" path="/DeliveryDetails" method="POST" doc:name="HTTP call" /> <object-to-string-transformer doc:name="Object to String"/> <logger message="Response: #[payload]" level="INFO" doc:name="Log response"/> </sub-flow>

    1. 将有效负载设置为包含密钥&#34; json&#34;将有效负载作为值。这应该使Mule发送表单请求,而无需将Content-Type明确设置为application/x-www-form-urlencoded
    2. HTH。