Как отладить http-запрос в Apache Camel

#https #apache-camel

Вопрос:

Есть ли способ регистрировать или отлаживать значения заголовка http? Я вижу, как регистрировать заголовки Camel, но у меня есть запрос GET, который не работает, и я почти уверен, что это проблема с заголовками, которые мне нужно отправить для аутентификации. У меня есть метод под названием generateSignature, который работает до тех пор, пока отображаются значения заголовка camel.

 from("timer:hello?period={{timer.period}}")  .routeId("pollOrderStatus")  .log("${header.CamelMessageTimestamp}")  .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http.HttpMethods.GET))  .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))  .setHeader("US-KEY", constant("12345"))  .setHeader("US-TS").exchange(exchange -gt; {  return exchange.getMessage().getHeader("CamelMessageTimestamp");  })  .setHeader("US-SIGN").exchange(exchange -gt; {   try {  String sig = this.generateSignature("ABCDEF",   (long) exchange.getMessage().getHeader("US-TS"),   "GET", "https://host.us/api/orders/history?market=USD", null);  return sig;  } catch (Exception e) {  // TODO Auto-generated catch block  e.printStackTrace();  return "";  }  })  .to("log:DEBUG?showBody=trueamp;showHeaders=true")  .to("https://host.us/api/orders/history?market=USD")   .log("${body}"); }  

В выходных данных заголовки Camel верны:

 Exchange[ExchangePattern: InOnly, Headers: { CamelHttpMethod=GET,  CamelMessageTimestamp=1637276749278,  Content-Type=application/json,  firedTime=Sat Nov 20 09:48:29 EST 2021,  US-KEY=12345,  US-SIGN=aa17goodlookingsig,  US-TS=1637276749278},  BodyType: null  

Но я получаю ошибку 401 от API, которая заставляет меня думать, что заголовки Camel, возможно, не попадают в заголовки http.

Комментарии:

1. Если вы видите 401, то Camel работает, и веб-сервер отвечает 401. Вероятно, вам нужно проверить, как выполнить аутентификацию на конечной точке rest. Попробуйте сначала запустить его в PostMan/Insomnia и т. Д.

2. @Нампибиан у меня есть. Я работаю над этим над PostMan, cURL и Python. Я даже использовал WireShark. Я переключил Camel на использование http (чтобы заголовки не шифровались), и я вижу, что заголовки заполнены. Я не вижу, в чем разница в запросе Верблюда, что он получает 401 по сравнению со всем остальным, что я пробовал.

3. Я не вижу заголовка «принять» в заголовках верблюдов, которые вы сбросили. Почтальон, по крайней мере, заполнил бы это. Любые коды возврата HTTP поступают с веб-сервера, Camel никогда не выдаст 401,500 или любой другой HTTP-код сам по себе, который поступит с веб-сервера. Если Camel не может связаться с сервером, вы увидите исключение подключения, а не код возврата HTTP. Короче говоря, маршрут обращается к веб-серверу и отправляет запрос, в котором ему отказывают. Вы также можете добавить инструкцию журнала в конец вашего маршрута, вы должны увидеть, что веб-серверы заполнили некоторые значения.

4. Просто мысль, но может быть, заголовок подписи неверен. Можете ли вы использовать один из почтальонов, который работает, а затем просто добавить его в качестве константы?

5. Я знаю, что подпись правильная. Я зарегистрировал его с помощью Camel и быстро скормил почтальону, что дало успешную и правильную полезную нагрузку. Я также пробовал добавлять и не добавлять «Принять» и «Тип содержимого». В запросе Camel есть что-то, что не нравится API. Я попытался войти в систему в конце, как это .to(«журнал:ОТЛАДКА? showBody=true и заголовки=true») Есть ли способ получить фактический генерируемый http-запрос?