如何在Apache Camel中获得curl的结果?

时间:2015-08-21 17:42:35

标签: apache-camel

如何在Apache Camel中获得curl的结果? Apache Camel有一些用于运行curl的“curl”组件吗?

或者我只需要使用camel-exec?

然后我需要解析json和"station":"\u041a\u0438\u0457\u0432-\u041f\u0430\u0441\u0430\u0436\u0438\u0440\u0441\u044c\u043a\u0438\u0439"

如何在Apache Camel中从这个json编码中获取普通文本?

我对Apache Camel没有任何考验..

curl 'http://booking.uz.gov.ua/purchase/search/' -H 'GV-Token: 502c55405bfb82fa16e08278d934c5f1' -H 'Origin: http://booking.uz.gov.ua' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8,ru;q=0.6,uk;q=0.4' -H 'Connection: keep-alive' -H 'Cookie: _gv_sessid=3lt3g4org56quapm20ogqs9n33; _gv_lang=uk; HTTPSERVERID=server1; __utmt=1; __utma=31515437.700625198.1438102950.1440172017.1440176787.29; __utmb=31515437.1.10.1440176787; __utmc=31515437; __utmz=31515437.1439982958.17.2.utmcsr=uz.gov.ua|utmccn=(referral)|utmcmd=referral|utmcct=/passengers/reservation_purchase_travel_documents/' -H 'GV-Ajax: 1' -H 'GV-Screen: 1280x800' -H 'GV-Referer: http://booking.uz.gov.ua/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: */*' -H 'Referer: http://booking.uz.gov.ua/' -H 'GV-Unique-Host: 1' -H 'DNT: 1' --data 'station_id_from=2218020&station_id_till=2200001&station_from=%D0%9A%D0%BE%D0%B2%D0%B5%D0%BB%D1%8C&station_till=%D0%9A%D0%B8%D1%97%D0%B2&date_dep=24.08.2015&time_dep=00%3A00&time_dep_till=&another_ec=0&search=' --compressed

1 个答案:

答案 0 :(得分:1)

作为第一步,您必须通过HTTP GET请求在给定的URL处获取文档。您可以通过丰富交换来在Apache Camel路由的范围内执行此操作,但您必须以某种方式触发路由。据我所知,对于HTTP,Camel中没有scheduled polling consumer组件。这就要求简单地创建一个类似于'来自(" http:...")'。

一种简单的方法可以是使用组件" http4"为了使用ConsumerTemplate请求文档。这可以通过CamelContext(CamelContext.createConsumerTemplate())创建。在Apache Camel tests中找到相关示例。使用" consumer.receiveBody(...)"。

查看这些行

为了处理JSON有效负载,您可以使用像JsonPath language这样的Camel的JSON工具。

如果您使用ConsumerTemplate来获取文档,则必须创建如下所示的路径(取自Camel文档)并使用ProducerTemplate触发它:

from("direct:start")
.choice()
.when().jsonpath("$.store.book[?(@.price < 10)]")
  .to("jms:queue:book.cheap")
.when().jsonpath("$.store.book[?(@.price < 30)]")
  .to("jms:queue:book.average")
.otherwise()
  .to("jms:queue:book.expensive")

在显示的示例中,您将身体发送到端点&#34; direct:start&#34;通过使用ProducerTemplate。