Mulesoft HTTP连接器配置

时间:2016-06-24 21:41:04

标签: mule mule-studio

当我连接到:

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>

10 个答案:

答案 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"/>