Mulesoft HTTP 连接器配置
Mulesoft HTTP Connector configuration
当我连接到:
http://legacy.cafebonappetit.com/api/2/menus?cafe=261
我会按原样回来 JSON。但是,我无法使用 Mulesoft HTTP 连接器执行此操作。当我尝试时,我得到了 500。这是我的 XML:
<flow name="GetDiningInfo">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="/api/2/menus" method="GET" doc:name="GET announcement from dining server" followRedirects="true" host="legacy.cafebonappetit.com" port="80">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
</http:request-builder>
</http:request>
<logger level="INFO" doc:name="Logger"/>
</flow>
连接器全局配置为:
<http:request-config name="HTTPReqConfigforCafeBonAppetit.com" host="legacy.cafebonappetit.com" port="80" basePath="/api/2" doc:name="HTTP Request Configuration"/>
我做错了什么?
谢谢...
更新:仍然没有快乐。我仍然通过 Mule 返回 500 内部服务器故障。
这是不重复路径的最新代码:
<http:request-config name="HTTPReqConfigforCafeBonAppetit" host="legacy.cafebonappetit.com" port="80" basePath="/api/2/" doc:name="HTTP Request Configuration" usePersistentConnections="false"/>
<flow name="GetDiningInfo">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTPReqConfigforCafeBonAppetit" path="menus" method="GET" doc:name="GET menu" followRedirects="true" parseResponse="false">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
</http:request-builder>
</http:request>
<logger level="INFO" doc:name="Logger"/>
</flow>
您是否评估了URL请求结果?通过引用该配置,它应该是 http://legacy.cafebonappetit.com/api/2/api/2/menus?cafe=261
这就是您无法获得预期结果的原因。因此,将 http:request 的 path 替换为 /menus
,没有基本路径 /api/2。因为它已经在 http:request-config
中定义了
下面的代码似乎有效。
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8084" doc:name="HTTP Listener Configuration"/>
<http:endpoint exchange-pattern="request-response" method="POST" name="HTTP" address="http://legacy.cafebonappetit.com/api/2/menus?cafe=261" doc:name="HTTP"/>
<flow name="GetDiningInfo">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<logger level="INFO" doc:name="Logger"/>
legacy.cafebonappetit.com
的服务器无法处理 header 主机,包括端口(valid)。 HTTP 连接器默认发送 Host: legacy.cafebonappetit.com:80
导致服务器拒绝请求,因此您需要显式添加 Host header,如下例所示。
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration" host="legacy.cafebonappetit.com" port="80" basePath="/api/2" doc:name="HTTP Request Configuration"/>
<flow name="so-testFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="menus" method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="legacy.cafebonappetit.com"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
</flow>
该示例还包括所有代码的状态代码验证器,它允许您在删除显式主机 header 时查看服务器发送的确切错误。
麻烦的是当你通过 80 端口向服务器发送请求时。服务器立即拒绝请求。要解决此问题,您必须添加 header,这样服务器才能理解并处理请求。
为此只需添加以下行:$<http:header headerName="Host" value="the_host"/>
.
以下XML得到解决方法:
<http:listener-config name="localhost" port="8085" doc:name="HTTP Listener Configuration" host="0.0.0.0"/>
<http:request-config name="HTTP_Request_Configuration" host="legacy.cafebonappetit.com" port="80" doc:name="HTTP Request Configuration" basePath="/api/2"/>
<flow name="GetDiningInfo">
<http:listener config-ref="localhost" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="/menus" method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="legacy.cafebonappetit.com"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
<logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
解决此问题的唯一方法是让服务器处理请求。
在 xml、
中添加这一行
<http:header headerName="Host" value="the_host"/>
您必须从 xml 中删除路径的全局配置中删除基本路径,因为它会生成 url,例如:http://legacy.cafebonappetit.com/api/2/api/2/menus?cafe=261
这里urlapi/2/api/2生成了两次所以这就是错误发生的原因
legacy.cafebonappetit.com 的服务器无法处理 header 主机,包括端口(有效)。
HTTP 连接器默认发送 Host: legacy.cafebonappetit.com:80 导致服务器拒绝请求,因此您需要显式添加 Host header,如下例所示。
enter image description here
你可以像这样使用代码
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0"
port="8081" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration"
host="legacy.cafebonappetit.com" port="80" basePath="/api/2" doc:name="HTTP
Request Configuration"/>
<flow name="so-testFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining"
doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="menus"
method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="legacy.cafebonappetit.com"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
</flow>
使用下面的代码解决您的问题...
<http:request config-ref="HTTP_Request_Configuration" path="/menus" method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="the_host"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
http:request-建设者
尝试添加一个header
当我连接到:
http://legacy.cafebonappetit.com/api/2/menus?cafe=261
我会按原样回来 JSON。但是,我无法使用 Mulesoft HTTP 连接器执行此操作。当我尝试时,我得到了 500。这是我的 XML:
<flow name="GetDiningInfo">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="/api/2/menus" method="GET" doc:name="GET announcement from dining server" followRedirects="true" host="legacy.cafebonappetit.com" port="80">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
</http:request-builder>
</http:request>
<logger level="INFO" doc:name="Logger"/>
</flow>
连接器全局配置为:
<http:request-config name="HTTPReqConfigforCafeBonAppetit.com" host="legacy.cafebonappetit.com" port="80" basePath="/api/2" doc:name="HTTP Request Configuration"/>
我做错了什么?
谢谢...
更新:仍然没有快乐。我仍然通过 Mule 返回 500 内部服务器故障。
这是不重复路径的最新代码:
<http:request-config name="HTTPReqConfigforCafeBonAppetit" host="legacy.cafebonappetit.com" port="80" basePath="/api/2/" doc:name="HTTP Request Configuration" usePersistentConnections="false"/>
<flow name="GetDiningInfo">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTPReqConfigforCafeBonAppetit" path="menus" method="GET" doc:name="GET menu" followRedirects="true" parseResponse="false">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
</http:request-builder>
</http:request>
<logger level="INFO" doc:name="Logger"/>
</flow>
您是否评估了URL请求结果?通过引用该配置,它应该是 http://legacy.cafebonappetit.com/api/2/api/2/menus?cafe=261
这就是您无法获得预期结果的原因。因此,将 http:request 的 path 替换为 /menus
,没有基本路径 /api/2。因为它已经在 http:request-config
下面的代码似乎有效。
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8084" doc:name="HTTP Listener Configuration"/>
<http:endpoint exchange-pattern="request-response" method="POST" name="HTTP" address="http://legacy.cafebonappetit.com/api/2/menus?cafe=261" doc:name="HTTP"/>
<flow name="GetDiningInfo">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<logger level="INFO" doc:name="Logger"/>
legacy.cafebonappetit.com
的服务器无法处理 header 主机,包括端口(valid)。 HTTP 连接器默认发送 Host: legacy.cafebonappetit.com:80
导致服务器拒绝请求,因此您需要显式添加 Host header,如下例所示。
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration" host="legacy.cafebonappetit.com" port="80" basePath="/api/2" doc:name="HTTP Request Configuration"/>
<flow name="so-testFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="menus" method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="legacy.cafebonappetit.com"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
</flow>
该示例还包括所有代码的状态代码验证器,它允许您在删除显式主机 header 时查看服务器发送的确切错误。
麻烦的是当你通过 80 端口向服务器发送请求时。服务器立即拒绝请求。要解决此问题,您必须添加 header,这样服务器才能理解并处理请求。
为此只需添加以下行:$<http:header headerName="Host" value="the_host"/>
.
以下XML得到解决方法:
<http:listener-config name="localhost" port="8085" doc:name="HTTP Listener Configuration" host="0.0.0.0"/>
<http:request-config name="HTTP_Request_Configuration" host="legacy.cafebonappetit.com" port="80" doc:name="HTTP Request Configuration" basePath="/api/2"/>
<flow name="GetDiningInfo">
<http:listener config-ref="localhost" path="/dining" doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="/menus" method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="legacy.cafebonappetit.com"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
<logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
解决此问题的唯一方法是让服务器处理请求。 在 xml、
中添加这一行<http:header headerName="Host" value="the_host"/>
您必须从 xml 中删除路径的全局配置中删除基本路径,因为它会生成 url,例如:http://legacy.cafebonappetit.com/api/2/api/2/menus?cafe=261
这里urlapi/2/api/2生成了两次所以这就是错误发生的原因
legacy.cafebonappetit.com 的服务器无法处理 header 主机,包括端口(有效)。 HTTP 连接器默认发送 Host: legacy.cafebonappetit.com:80 导致服务器拒绝请求,因此您需要显式添加 Host header,如下例所示。 enter image description here
你可以像这样使用代码
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0"
port="8081" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration"
host="legacy.cafebonappetit.com" port="80" basePath="/api/2" doc:name="HTTP
Request Configuration"/>
<flow name="so-testFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dining"
doc:name="HTTP"/>
<http:request config-ref="HTTP_Request_Configuration" path="menus"
method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="legacy.cafebonappetit.com"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
</flow>
使用下面的代码解决您的问题...
<http:request config-ref="HTTP_Request_Configuration" path="/menus" method="GET" doc:name="HTTP">
<http:request-builder>
<http:query-param paramName="cafe" value="261"/>
<http:header headerName="Host" value="the_host"/>
</http:request-builder>
<http:success-status-code-validator values="100..599"/>
</http:request>
http:request-建设者
尝试添加一个header