Я хочу сделать несколько вызовов 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 :)
Вы можете перевести HttpURLConnection в режим отладки, включив java.logging с
-Djava.util.logging.config.file=logging.properties
и поместив в logging.properties (по умолчанию в JRE_HOME \ lib) следующее свойство
sun.net.www.protocol.http.HttpURLConnection.level = ALL
Используйте что-то вроде tcpdump, которое может сбрасывать фактические сетевые пакеты, отправленные или полученные вашим компьютером.
tcpdump будет работать, но может быть трудно заставить его делать то, что вы хотите. NetCat более удобен в использовании (вот страница проекта: http://netcat.sourceforge.net/ - большинство платформ Unix уже включают его).
nc -l 9999
Эта программа будет слушать TCP-порт 9999, и когда HTTP-клиент подключится, она распечатает полный текст запроса.