Java: отображать запрос HttpURLConnection перед отправкой
Я хочу сделать некоторые вызовы API для сервера с помощью HttpURLConnection
. Но запросы не увенчались успехом, возвращаясь:
<error>
<http_status>400 Bad Request</http_status>
<message>Unexpected request Content-Type header ''. Expecting 'application/x-www-form-urlencoded'.</message>
</error>
Итак, я хочу проверить, что такое "реальный" контент, который отправляется на сервер. По реальному содержанию я имею в виду точный HTTP-запрос.
Любые идеи, как я могу это видеть?
Edit:
Основываясь на первых ответах здесь, я должен уточнить свою проблему: я хочу избежать использования внешней программы, такой как HTTP-анализатор или что-то еще, и я надеялся, что есть функция или свойство или что-то еще, что содержит информацию, которую я ищу.
Если это не так, кто-то знает, можно ли эту информацию вручную перестроить (например, вызывая несколько функций, таких как getRequestMethod() и т.д.)
Я часто сталкиваюсь с этой проблемой, так что это стоит усилий для создания такой функциональности. Просто нужно знать, как:)
Ответы
Ответ 1
Вы можете поместить HttpURLConnection в режим отладки, включив java.logging с помощью
-Djava.util.logging.config.file=logging.properties
и введите logging.properties(по умолчанию в JRE_HOME\lib) следующее свойство
sun.net.www.protocol.http.HttpURLConnection.level = ALL
Ответ 2
tcpdump будет работать, но может быть трудно заставить его делать то, что вы хотите. NetCat более удобна для пользователей (здесь страница проекта: http://netcat.sourceforge.net/ - большинство платформ Unix уже включают его).
nc -l 9999
Это будет прослушивать порт TCP 9999, а при подключении HTTP-клиента он распечатает полный текст запроса.
Ответ 3
Используйте что-то вроде tcpdump, который может удалять фактические сетевые пакеты, которые выходят или принимаются вашим компьютером.