#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-запрос?