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-запрос.

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

Редактировать: Но запросы не выполняются, возвращаются:

<error>
  <http_status>400 Bad Request</http_status>
  <message>Unexpected request Content-Type header ''. Expecting 'application/x-www-form-urlencoded'.</message>
</error>

Итак, я хочу проверить, что такое «реальный» контент, который отправляется на сервер. Под реальным контентом я имею в виду точный HTTP-запрос.

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

Редактировать: Но запросы не выполняются, возвращаются:

<error>
  <http_status>400 Bad Request</http_status>
  <message>Unexpected request Content-Type header ''. Expecting 'application/x-www-form-urlencoded'.</message>
</error>

Итак, я хочу проверить, что такое «реальный» контент, который отправляется на сервер. Под реальным контентом я имею в виду точный HTTP-запрос.

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

Редактировать: Based on the first answers here I should clarify my problem: I want to avoid using an external program like HTTP sniffer or anything and I was hoping that there is a function or a property or whatever that holds the information I am looking for.

If that is not the case, does someone know if this information can be manually rebuilt (for example by calling several functions like getRequestMethod(), etc.)

I am facing this problem kinda often so that it's worth the effort to build such functionality myself. Just need to know how :)

21
задан Michael Currie 10 September 2015 в 22:51
поделиться

3 ответа

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

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

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

sun.net.www.protocol.http.HttpURLConnection.level = ALL
14
ответ дан 29 November 2019 в 21:57
поделиться

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

0
ответ дан 29 November 2019 в 21:57
поделиться

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

nc -l 9999

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

5
ответ дан 29 November 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: