Использование Apache HTTPClient - как можно увидеть необработанную строку запроса перед ее отправкой?

В целях отладки я хотел бы видеть необработанный запрос, который будет отправлен. Есть ли способ получить это без монитора HTTP прямо из APIHttpPost или жеHttpClient?

Я нашел некоторые "почти" повторяющиеся вопросы, но не для этого конкретного

Ответы на вопрос(4)

Попробуй это:

HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);

method.setParameter(...., ....);

получить URI

System.out.println("getUri: " + method.getURI());

получить параметры в POST

method.getRequestEntity().writeRequest(System.out);
 31 дек. 2018 г., 21:07
Это нецелесообразно ни для чего, кроме демонстрации. Можете ли вы представить, что делаете это для каждого HTTP-вызова?
 01 июн. 2015 г., 13:04
System.out не должен поощряться для регистрации
 23 июл. 2018 г., 13:51
@MitchKent Хотя я согласен, я не согласен загрязнять минимальный пример несоответствующим кодом регистрации.
 09 февр. 2016 г., 11:56
Мне понравился этот пример, потому чтоmethod.getRequestEntity().writeRequest помог мне распечатать запрос.
Решение Вопроса

Вы можете установить некоторые переменные окружения для Apache HttpClient (пример протестирован для 4.3.2).

System.setProperty("org.apache.commons.logging.Log","org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.wire", "DEBUG");

Есть также еще несколько переменных для отладки:

System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.impl.conn", "DEBUG");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.impl.client", "DEBUG");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.client", "DEBUG");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "DEBUG");
 23 авг. 2015 г., 10:46
Дополнительные параметры ведения журнала в зависимости от среды см. В разделеhc.apache.org/httpcomponents-client-ga/logging.html
 21 апр. 2017 г., 19:51
@Eran Medan Существует также HttpRequestInterceptor, если вы хотите сделать это для конкретного запроса

Попробуйте включитьDEBUG режим в ваших конфигурациях регистрации, если вы используетеlog4j Вы можете добавить это кlog4j.xml файл вашего проекта

<root>
    <priority value="DEBUG" />
    <appender-ref ref="FILE" />
</root>

Вы будете иметь полные заголовки запросов, параметры, тело и т. Д., Зарегистрированные в ваших файлах журналов.

org.apache.http.client.fluent.Request#viaProxy 

Этот метод может сделать ваш запрос проходящим через прокси-сервер, так что вы можете запустить локальный прокси-сервер, например, Fiddler, так что этот отладочный прокси может показать детали http-запроса и ответа.

Ваш ответ на вопрос