从 Mule ESB 发出 POST 请求
Make POST request from Mule ESB
我无法向 Web 服务器发出正确的 HTTP 请求(运行 在 PHP 下)。
我需要发送带有 属性 json
和一些值的 POST 请求,例如 { "employee_id":191, "date":"2015-08-11", "time":"14:26:00" }
.
例如,如果我从 Postman 或 cURL 发出请求,它就可以工作,请求看起来像这样
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
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
或使用 cURL
curl -d "json={ \"employee_id\":191, \"date\":\"2015-08-11\", \"time\":\"14:26:00\" }" http://192.168.0.100:80/DeliveryDetails/
但是当我尝试从 Mule ESB 发出请求时,它无法正常工作,因为请求不正确。
流程看起来像这样
<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
<message-properties-transformer doc:name="Message Properties">
<add-message-property key="json" value="#[payload]"/>
</message-properties-transformer>
结果还是一样
编辑
HTTP 配置如下所示
<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>
但是我收到的正文仍然只是 payload
,没有其他属性,例如 json=
或 Content-Disposition: form-data; name="json"
你需要输入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"/>
您可以根据需要在此处配置 Content-Type
你也可以参考这里:-
由于有效载荷只是 JSON 数据,因此在大多数情况下都会发送数据。您的卷曲示例将 "json=" 部分设置为正文。所以这里有几个选项:
- 像使用 curl 一样修改负载以添加所需的正文并将 Content-Type 设置为
application/x-www-form-urlencoded
。
- 通过将数据添加为附件来发送多部分内容。在你的情况下尝试:
<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>
- 将负载设置为包含键 "json" 的映射,负载作为值。这应该使 Mule 发送表单请求,而无需将 Content-Type 明确设置为
application/x-www-form-urlencoded
.
HTH.
我无法向 Web 服务器发出正确的 HTTP 请求(运行 在 PHP 下)。
我需要发送带有 属性 json
和一些值的 POST 请求,例如 { "employee_id":191, "date":"2015-08-11", "time":"14:26:00" }
.
例如,如果我从 Postman 或 cURL 发出请求,它就可以工作,请求看起来像这样
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
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
或使用 cURL
curl -d "json={ \"employee_id\":191, \"date\":\"2015-08-11\", \"time\":\"14:26:00\" }" http://192.168.0.100:80/DeliveryDetails/
但是当我尝试从 Mule ESB 发出请求时,它无法正常工作,因为请求不正确。
流程看起来像这样
<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
<message-properties-transformer doc:name="Message Properties">
<add-message-property key="json" value="#[payload]"/>
</message-properties-transformer>
结果还是一样
编辑
HTTP 配置如下所示
<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>
但是我收到的正文仍然只是 payload
,没有其他属性,例如 json=
或 Content-Disposition: form-data; name="json"
你需要输入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"/>
您可以根据需要在此处配置 Content-Type
你也可以参考这里:-
由于有效载荷只是 JSON 数据,因此在大多数情况下都会发送数据。您的卷曲示例将 "json=" 部分设置为正文。所以这里有几个选项:
- 像使用 curl 一样修改负载以添加所需的正文并将 Content-Type 设置为
application/x-www-form-urlencoded
。 - 通过将数据添加为附件来发送多部分内容。在你的情况下尝试:
<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>
- 将负载设置为包含键 "json" 的映射,负载作为值。这应该使 Mule 发送表单请求,而无需将 Content-Type 明确设置为
application/x-www-form-urlencoded
.
HTH.