Подтвердить что ты не робот

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() и т.д.)

Я часто сталкиваюсь с этой проблемой, так что это стоит усилий для создания такой функциональности. Просто нужно знать, как:)

4b9b3361

Ответ 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, который может удалять фактические сетевые пакеты, которые выходят или принимаются вашим компьютером.