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

How can I get result from curl in 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

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

这样的路线的要求

一种简单的方法是使用组件 "http4" 来请求带有 ConsumerTemplate 的文档。这可以通过 CamelContext (CamelContext.createConsumerTemplate()) 创建。在 Apache Camel tests 中找到一个例子。查看带有 "consumer.receiveBody(...)".

的行

为了处理 JSON 负载,您可以使用 Camel 的 JSON 工具,例如 JsonPath language.

如果您使用 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")

在所示示例中,您将使用 ProducerTemplate 将正文发送到端点 "direct:start"。