【问题标题】:proper syntax using camel-http4 for an https call使用 camel-http4 进行 https 调用的正确语法
【发布时间】:2018-04-24 22:32:16
【问题描述】:

我就是无法让这个 HTTP4 工作。我正在尝试向 https 站点发出 POST 请求。但是,似乎没有任何效果。有人能告诉我用 HTTP4 执行 HTTPS POST 的正确方法是什么吗?非常感谢,真的很辛苦。只需要知道我做错了什么......简单的事情总是转向南方。

我试过了。

http4://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io:443/oauth/token
https://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io/oauth/token
http4://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io/oauth/token
https://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io:443/oauth/token
http4:https://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io:443/oauth/token

但似乎没有任何效果?

【问题讨论】:

  • 首先,我不认为http4:// 是你想要的。我不认为它是 URL 协议指示符。要使 https 正常工作,您必须建立安全连接。尝试谷歌搜索establish https session 开始。如果您尝试失败,请在 StackOverflow 上发布更具体的问题。请参阅How to post,并发布Minimal, Complete, Verifiable Example
  • 您的意思是https4://(注意https4:// 中的s)?另请参阅http4 Camel Docs 中的为 HTTP 客户端设置 SSL 一章
  • 谢谢 burki,不,我的意思是 http4。

标签: apache-camel camel-http


【解决方案1】:

请使用 bridgeEndpoint=true 以便您可以离开服务器

【讨论】:

    【解决方案2】:

    camel-http4 组件适合我想要实现的目标。我只需要生产到一个端点。我不想公开 Web 服务。但是,谢谢您的回复。

    camel-http4 与骆驼码头

    您只能生产到由 camel-http4 组件生成的端点。因此,它不应该被用作骆驼路线的输入。要通过 HTTP 服务器绑定/公开 HTTP 端点作为 Camel 路由的输入,请改用 Jetty 组件。

    我发现定义 HTTP4 端点的正确方法是

    http4:hostname[:port][/resourceUri][?options]
    

    我遇到的问题是动态 toD 路由和 Exchange.HTTP_URI 设置的替换,这不能正常工作。

    因此,使用诸如

    之类的 uri
    http4://d1e53858-2903-4c21-86c0-95edc7a5cef2.uaa.run.aws-us.ice.io:443/oauth/token
    

    有效。机制,不起作用。

    Exchange.HTTP_URI

    要调用的 URI。此选项的值将覆盖直接在端点上设置的现有 URI。它与 Camel 端点 URI 不同,您可以在其中配置端点选项,例如安全性等。此标头不支持,它只是 HTTP 服务器的 URI。

        <route 
            id="core.getToken.route"
            autoStartup="true" >
            <from id="getToken" ref="getToken" />
            <process ref="uAARequestTokenProcessor" />
    <!--        <log message="Message after uAARequestTokenProcessor:  ${body}" loggingLevel="INFO"/>   -->
             <setHeader headerName="CamelHttpMethod">
                <constant>POST</constant>
             </setHeader>
    <!--         <setHeader headerName="CamelHttpUri">
                <simple>${header.TOKENURL}</simple>
             </setHeader>  -->
            <log message="HTTP4 POST headers: ${headers}" loggingLevel="DEBUG"/>
            <log message="HTTP4 POST body: ${body}" loggingLevel="DEBUG"/> 
            <to uri="http4://d1e-uaa.run.aws-usw02-pr.ice.io:443/oauth/token?throwExceptionOnFailure=false" />
            <toD uri="${header.TOKENURL}?throwExceptionOnFailure=false" />
            <log message="After HTTP4 POST: ${body}" loggingLevel="INFO"/>
            <to uri="{{accessToken}}" />    
        </route>    
    

    所以现在对我来说,设置 Exchange.HTTP_URI 不会覆盖端点中定义的 URI

    其中 Exchange.HTTP_URI 定义为: TOKENURL=http4://d1e53858-2903-4c21-86c0-95edc7a5cef2.uaa.run.aws-usw02-pr.ice.io:443/oauth/token

    这是行不通的。谢谢。

    【讨论】:

    • 我要多玩一点,我认为这与我在 Exchange.HTTP_URI 中定义 URI 的方式有关。也许它不应该包含 http4 部分 IDK ???
    【解决方案3】:

    好的,我希望这对某人有所帮助,解决方案是 2 倍。首先代理没有得到确认,由于领先的协议def,http://我只使用了IP地址和没有http://的cononical名称,并且我能够收到504网关超时错误。所以 HTTP4 端点按照设置的样子工作

    http4://myhost:443/path
    http4://uaa-svc-prod.app-api.aws-usw02-pr.io:443/oauth/token
    

    我能够通过首先创建一个硬端点来使请求正常工作

        <to uri="http4://uaa-svc-prod.app-api.aws-usw02-pr.io:443/oauth/token?throwExceptionOnFailure=false" />
    

    所以端点 http4 通过设置覆盖

    m.setHeader(Exchange.HTTP_URI, tokenUrl);
    

    工作。

    然后我尝试使用他在路由中覆盖的 XML 设置。

    <log message="HTTP4 POST headers: ${headers}" loggingLevel="DEBUG"/>
    <setHeader headerName="CamelHttpUri">
        <simple>${header.TOKENURL}?throwExceptionOnFailure=false</simple>
    </setHeader>
    <to uri="http4://uaa-svc-prod.app-api.aws-usw02-pr.io:443/oauth/token?throwExceptionOnFailure=false" />
    

    这也有效。 :) 但是我仍然收到 504 网关超时错误返回。

    我尝试在覆盖 URI 中使用 https:// URI

    https://uaa-svc-prod.app-api.aws-usw02-pr.io/oauth/token
    

    http4:// 端点被 https:// URI 覆盖,现在我得到一个 CamelHttpResponseCode=401, CamelHttpResponseText=Unauthorized

    所以,它现在正在工作,快乐快乐快乐快乐...... 总之,不要在代理设置中包含 http:// 协议定义。使用 IP 或锥形名称。

       <camelContext     
          id="com.ge.digital.passthru.coreCamelContext"
          trace="true"
          xmlns="http://camel.apache.org/schema/blueprint"
          allowUseOriginalMessage="false"
          streamCache="true"
          errorHandlerRef="deadLetterErrorHandler" >
          <properties>
               <property key="http.proxyHost" value="PITC-Zscaler.proxy.corporate.america.com"/>
               <property key="http.proxyPort" value="80"/>
          </properties>
    

    定义 HTTP4:// 端点时使用语法

    http4:hostname[:port][/resourceUri][?options]
    

    并且由 Exchange.HTTP_URI 在端点 def 上设置的 URI 包含您正在调用的 https://myhost/path

    这对我有用,我希望这对像我这样的新手有所帮助。 谢谢大家。

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多