Nano Hash - криптовалюты, майнинг, программирование

Журнал исходящих запросов JBoss EAP 7/RESTEasy

Есть ли способ регистрировать исходящие HTTP-запросы, созданные клиентами с помощью ResteasyClientBuilder?

У нас возникли проблемы с запросами, сделанными одной из наших служб другой, и мы хотим просмотреть заголовки, тело и т. д. фактического HTTP-запроса, который создает/отправляет RESTEasy/JBoss EAP 7.


  • Вы хотите зарегистрировать ответ от вашей службы или запрос, который вы создали? для реализации ответа: PostProcessInterceptor 18.01.2017
  • Я хочу зарегистрировать http-запрос, который делает моя служба, для проверки заголовков и тела. Мы смогли получить эту информацию, сделав дамп tcp на сервере. Но поскольку вызываемый сервис использует https, нам пришлось сначала создать прокси для прохождения, чтобы захват был читабельным. Было бы гораздо лучше, если бы мы могли просто логировать исходящий запрос. 19.01.2017
  • может быть, это поможет blogs.adobe.com/livecycle/2011/10/, но это будет работать для всех запросов. Кроме того, работающий сервер в режиме отладки также печатает все запросы, но это слишком тяжело 19.01.2017
  • Спасибо, но этот блог о запросе регистрации, сделанном JBoss. Я хочу регистрировать запросы ОТ JBoss. 19.01.2017
  • Вы говорите, что ваша служба вызывает другую службу, и вы хотите зарегистрировать этот запрос, который делает клиент? 20.01.2017
  • Да, именно об этом мой вопрос. 20.01.2017
  • Можете ли вы использовать такой сервис, как moesif.com/features? (полное раскрытие я там работаю). Они могут отслеживать как входящие, так и исходящие HTTP-вызовы. 21.01.2017
  • @sdoca, почему бы вам не использовать предоставленный ответ, он регистрирует запрос и ответ как на клиентский запрос, который помещается в оставшуюся веб-службу 23.01.2017

Ответы:


1

Если вы хотите зарегистрировать запрос от клиента, используйте ниже

Client client = ClientBuilder.newClient();
    String url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=" + "en" + "&tl=" + "hi"
            + "&dt=t&q=" + URLEncoder.encode(msg);
    client.register(new LoggingFilter());

Здесь client.register(new LoggingFilter()); ведет журнал за вас, вы можете передать ему регистратор.

Вывод

Jan 20, 2017 1:13:48 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Sending client request on thread http-bio-127.6.45.129-8080-exec-2
   https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=hi&dt=t&q=ad
Jan 20, 2017 1:13:48 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Sending client request on thread http-bio-127.6.45.129-8080-exec-2
1 > GET https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=hi&dt=t&q=ad
Jan 20, 2017 1:13:51 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Client response received on thread http-bio-127.6.45.129-8080-exec-2
1 < 200
1 < Accept-Ranges: none
1 < Access-Control-Allow-Origin: *
1 < Alt-Svc: quic=":443"; ma=2592000; v="35,34"
1 < Cache-Control: no-cache, no-store, must-revalidate
1 < Content-Disposition: attachment; filename="f.txt"
1 < Content-Type: application/json; charset=UTF-8
1 < Date: Fri, 20 Jan 2017 07:43:51 GMT
1 < Expires: Fri, 01 Jan 1990 00:00:00 GMT
1 < Pragma: no-cache
1 < Server: HTTP server (unknown)
1 < Transfer-Encoding: chunked
1 < Vary: Accept-Encoding
1 < X-Content-Type-Options: nosniff
1 < X-Frame-Options: SAMEORIGIN
1 < X-XSS-Protection: 1; mode=block

То же самое можно сделать, отредактировав web.xml, как показано ниже.

    <web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
         <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
         <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
     </init-param>
     <init-param>
         <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
         <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
     </init-param>

 <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.webspherenotes.rest.ContactApplication</param-value>
    </init-param>

  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

</web-app>
20.01.2017
  • Спасибо за помощь. Это изменение кода, и я надеялся просто установить что-то в JBoss, которое включает/выключает регистрацию запросов. 23.01.2017
  • отредактировал класс ответа для параметра инициализации, может отличаться для более новой версии джерси 24.01.2017
  • Обновление web.xml аналогично изменению кода. Требуется сборка/развертывание приложения. Как указывалось ранее, я искал общий способ включения/выключения ведения журнала в JBoss EAP. Кроме того, JBoss использует RESTEasy, а не Jersey. 25.01.2017
  • Затем вы можете перейти к пользовательскому классу фильтра вместо com.sun.jersey.api.container.filter.LoggingFilter, и в нем вы можете иметь механизм включения/выключения, для этого потребуется изменить код только один раз, и вы можете добавить этот код в другой jar и добавьте его зависимость от модуля на случай, если вам нужны отдельные базы кода для такого ведения журнала. 27.01.2017
  • Я ценю ваши усилия, чтобы помочь, но я искал вариант в JBoss EAP для регистрации исходящих HTTP-запросов в целом. Я НЕ ищу способ включить ведение журнала в конкретном приложении. Я уже знал о нескольких способах сделать это. Очень может быть, что ответ на мой вопрос заключается в том, что это невозможно сделать. Я могу принять это. 27.01.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..