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:requestpath 替换为 /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