Mulesoft HTTP连接器配置

Mulesoft HTTP连接器配置,mule,mule-studio,Mule,Mule Studio,当我连接到: http://legacy.cafebonappetit.com/api/2/menus?cafe=261 我得到了我应该得到的。但是,我无法使用Mulesoft HTTP连接器实现这一点。我一试,就赢了500英镑。以下是我的XML: <flow name="GetDiningInfo"> <http:listener config-ref="HTTP_Listener_Configuration" path="/dining" doc:name

当我连接到:

http://legacy.cafebonappetit.com/api/2/menus?cafe=261
我得到了我应该得到的。但是,我无法使用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:request的路径替换为
/菜单
,而不使用基本路径/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.cafebonapett.com的服务器无法处理包括端口(已关闭)在内的头主机。默认情况下,HTTP连接器发送
Host:legacy.cafebonapetit.com:80
,导致服务器拒绝请求,因此需要显式添加主机头,如下例所示

<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>


该示例还包括一个用于所有代码的状态代码验证程序,它允许您在删除显式主机头时查看服务器发送的确切错误。

这里的问题是当您通过80端口向服务器发送请求时。服务器立即拒绝该请求。要解决这个问题,必须添加头,这样服务器才能理解和处理请求

为此,只需添加以下行:
$

以下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:


此处的url api/2/api/2生成了两次,因此出现错误

legacy.cafebonappett.com的服务器无法处理包括端口(有效)在内的头主机。 默认情况下,HTTP连接器发送Host:legacy.cafebonapett.com:80,导致服务器拒绝请求,因此需要显式添加主机头,如下例所示。
您可以像这样使用代码

<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:请求生成器


尝试添加标题

您也可以共享请求配置吗?@afelisatti添加到原始问题中,谢谢!你什么时候得到下面的错误。我想我接近解决方案了。出现数据库错误无法使用提供的设置连接到数据库服务器。

文件名:/var/www/vhosts/cafebonappett.com/httpdocs/legacy/core/MY_Loader.php

行号:33

配置显示错误。正如所回答的,您正在定义一个基本路径(/api/v2),然后是一个已经包含该路径的路径(api/v2/menus)。您应该使用“菜单”作为路径。@afelisati您可以提供获取错误的代码吗?我试过了,却发现了错误。如果你能提供代码,我将删除我的答案或编辑我的答案。我已经尝试与请求者,但它没有工作,我无法找到原因。你能帮忙吗?这就是我使用不推荐使用的HTTP连接器的原因。是的,路径是双重的,但我认为他可能尝试了许多方法,然后找到了一些东西,他提供了他拥有的代码。我可能错了。谢谢你的回答,但我仍在努力解决这个问题。我按照你的建议做了,现在我拿到了404。有没有办法让我看看Mulesoft从我的代码中创建了什么?谢谢!这很有效。但是,如果我使用Postman来访问这个服务器,并且在URL中包含了端口,那么它就可以正常工作。知道为什么吗?我使用Wireshark()来查看邮递员发送的实际请求,而主机头不包括端口(即使在显式添加端口时),所以我猜端口正在被删除,可能是因为似乎很多服务器都无法处理它。在使用postman或直接调用服务时,您根本没有提到其中的端口名。服务器拒绝端口的原因是什么?某些服务器的编码不正确:)它们可能使用主机头值来计算某些内容,而不考虑端口可能在那里。$Welcome KranthiKumar!你能在答案中加上你的例子,突出重点吗?我们试图让我们的答案保持在最后——我们永远无法确定这个链接在几年内是否有效。