Java: Показать запрос HttpURLConnection перед отправкой - PullRequest
20 голосов
/ 07 августа 2010

Я хочу сделать несколько 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-запрос.

Есть идеи, как мне это увидеть?

Редактировать: Основываясь на первых ответах, я должен прояснить свою проблему:Я хочу избежать использования внешней программы, такой как HTTP sniffer или чего-то еще, и я надеялся, что есть функция или свойство, или что-то еще, что содержит информацию, которую я ищу.

Если это не так,кто-то знает, может ли эта информация быть перестроена вручную (например, путем вызова нескольких функций, таких как getRequestMethod () и т. д.)

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

Ответы [ 3 ]

14 голосов
/ 07 августа 2010

Вы можете перевести HttpURLConnection в режим отладки, включив java.logging с помощью

-Djava.util.logging.config.file=logging.properties

и поместите в logging.properties (по умолчанию в JRE_HOME \ lib) следующее свойство

sun.net.www.protocol.http.HttpURLConnection.level = ALL
5 голосов
/ 07 августа 2010

tcpdump будет работать, но может быть трудно заставить его делать то, что вы хотите.NetCat более удобен для пользователя (вот страница проекта: http://netcat.sourceforge.net/ - большинство платформ Unix уже включают его).

nc -l 9999

Это будет прослушивать порт TCP 9999 и при подключении HTTP-клиента, он распечатает полный текст запроса.

0 голосов
/ 07 августа 2010

Используйте что-то вроде tcpdump, которое может выводить фактические сетевые пакеты, которые испускаются или принимаются вашим компьютером.

...