2010-08-06 7 views
20

Desidero effettuare alcune chiamate API a un server utilizzando HttpURLConnection. Ma le richieste non hanno successo, il ritorno:Java: richiesta di visualizzazione di HttpURLConnection prima dell'invio

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

Quindi voglio controllare qual è il contenuto "reale" è che viene inviato al server. Per contenuto reale intendo l'esatta richiesta HTTP.

Qualche idea su come posso vedere questo?

Edit: Sulla base delle prime risposte qui vorrei chiarire il mio problema: voglio evitare di usare un programma esterno come sniffer HTTP o qualsiasi cosa e speravo che ci sia una funzione o una proprietà o qualsiasi altra cosa che tiene le informazioni che sto cercando.

Se questo non è il caso, qualcuno sa se questa informazione può essere ricostruito manualmente (ad esempio chiamando diverse funzioni come getRequestMethod(), etc.)

Sono di fronte a questo problema un pò spesso in modo che sia vale la pena di costruire da solo tali funzionalità. Basta sapere come :)

+0

Eventuali duplicati di [Come abilitare la registrazione fili per un traffico HttpURLonnonnection java?] (http://stackoverflow.com/questions/1445919/how-to-enable-wire-logging-for-a-java-httpurlconnection-traffic) – Vadzim

risposta

14

Si può mettere la HttpURLConnection in modalità debug, consentendo java.logging con

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

e mettere in logging.properties (per impostazione predefinita in JRE_HOME \ lib) la seguente proprietà

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

I do not so davvero cosa devo fare con la linea di codice che hai menzionato sopra .. dove devo fare questo? (usando eclipse come IDE) – Hirnhamster

+2

È inoltre necessario impostare "java.util.logging.ConsoleHandler.level = FINEST" – Gili

+1

@Hirnhamster, nella scheda Run Configuration - Arguments, si aggiunge alla sezione degli argomenti VM. – RealHowTo

0

Utilizzare qualcosa come tcpdump, che può scaricare i pacchetti di rete effettivi che vengono emessi o ricevuti dal computer.

4

tcpdump funzionerà, ma può essere difficile farlo fare quello che vuoi. NetCat è più user-friendly (ecco la pagina del progetto: http://netcat.sourceforge.net/ - la maggior parte delle piattaforme Unix lo include già).

nc -l 9999 

Questo sarà in ascolto sulla porta TCP 9999, e quando un client HTTP si connette, sarà stampare il testo integrale della richiesta.