Java: Display request of an HttpURLConnection before sending

偶尔善良 提交于 2019-11-27 15:44:48

问题


I want to make some API calls to a server using HttpURLConnection. But the requests are not successful, returning:

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

So I want to check what the "real" content is that is being sent to the server. By real content I mean the exact HTTP request.

Any ideas how I can see this?

Edit: 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 :)


回答1:


You can put the HttpURLConnection in debug mode by enabling java.logging with

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

and put in logging.properties (by default in JRE_HOME\lib) the following property

sun.net.www.protocol.http.HttpURLConnection.level = ALL



回答2:


tcpdump will work, but it can be hard to make it do what you want. NetCat is more user-friendly (here's the project page: http://netcat.sourceforge.net/ - most Unix platforms already include it).

nc -l 9999

This will listen on TCP port 9999, and when an HTTP client connects, it'll print out the full text of the request.




回答3:


Use something like tcpdump, which can dump the actual network packets that are emitted or received by your computer.



来源:https://stackoverflow.com/questions/3428341/java-display-request-of-an-httpurlconnection-before-sending

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!