当我连接到:
http://legacy.cafebonappetit.com/api/2/menus?cafe=261
我应该回复JSON。但是,我无法使用Mulesoft HTTP Connector执行此操作。当我尝试时,我回到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>
答案 0 :(得分:2)
您是否评估了网址请求结果?通过引用该配置,它应该是http://legacy.cafebonappetit.com/api/2/api/2/menus?cafe=261
这就是你无法获得预期结果的原因。因此,使用/menus
替换 http:request 的路径,而不使用基本路径 / api / 2 。因为它已在 http:request-config
答案 1 :(得分:0)
legacy.cafebonappetit.com
的服务器无法处理包含端口(valid)的标头主机。 HTTP连接器默认发送Host: legacy.cafebonappetit.com:80
,导致服务器拒绝请求,因此您需要显式添加Host标头,如下例所示。
<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>
该示例还包括所有代码的状态代码验证程序,它允许您查看服务器在删除显式主机标头时发送的确切错误。
答案 2 :(得分:0)
这里的问题是当你通过80端口向服务器发送请求时。服务器立即拒绝请求。要解决此问题,您必须添加标头,这样服务器就能理解并处理请求。
为此,只需添加以下行:$<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>
答案 3 :(得分:0)
解决此问题的唯一方法是让服务器处理请求。 在xml中添加此行,
<http:header headerName="Host" value="the_host"/>
答案 4 :(得分:0)
您必须从xml中的删除路径的全局配置中删除基本路径,因为它会生成以下网址:http://legacy.cafebonappetit.com/api/2/api/2/menus?cafe=261
这里在url api / 2 / api / 2中生成了两次,这就是为什么会出现错误
答案 5 :(得分:0)
legacy.cafebonappetit.com的服务器无法处理包含端口(有效)的标头主机。 HTTP连接器默认发送Host:legacy.cafebonappetit.com:80,导致服务器拒绝请求,因此您需要显式添加Host标头,如下例所示。 enter image description here
答案 6 :(得分:0)
你可以使用像这样的代码
<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>
答案 7 :(得分:0)
使用以下代码解决您的问题...
<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>
答案 8 :(得分:0)
HTTP:要求建设者
尝试添加标题
答案 9 :(得分:-1)
以下代码似乎有效。
<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"/>