2010-08-06 11 views
20

Chcę wykonać niektóre wywołania API do serwera przy użyciu HttpURLConnection. Ale prośby nie powiodły się, powracając:Java: Wyświetl żądanie HttpURLConnection przed wysłaniem

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

Chcę sprawdzić, jaka jest "prawdziwa" zawartość przesyłana na serwer. Przez prawdziwą treść mam na myśli dokładne żądanie HTTP.

Jakieś pomysły, jak mogę to zobaczyć?

Edit: podstawie pierwszych odpowiedzi tutaj powinienem wyjaśnić mój problem: Chcę uniknąć używania zewnętrznego programu jak sniffera HTTP lub cokolwiek i miałem nadzieję, że nie jest funkcją lub właściwością lub cokolwiek, które posiada informacje, których szukam.

Jeśli to nie jest przypadek, czy ktoś wie, czy ta informacja może być ręcznie przebudowany (na przykład poprzez wywołanie kilku funkcji jak getRequestMethod() itp)

Jestem w obliczu tego problemu trochę często tak, że jest to warte wysiłku, aby samodzielnie zbudować taką funkcjonalność. Po prostu musisz wiedzieć jak to zrobić :)

+0

Możliwy duplikat [Jak włączyć rejestrowanie drutu dla ruchu Java HttpURLConnection?] (http://stackoverflow.com/questions/1445919/how-to-enable-wire-logging-for-a-java-httpurlconnection-traffic) – Vadzim

Odpowiedz

14

można umieścić HttpURLConnection w trybie debugowania poprzez umożliwienie java.logging z

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

i umieścić w logging.properties (domyślnie w JRE_HOME \ lib) następującą właściwość

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

Ja nie naprawdę wiem, co mam zrobić z linią kodu, o której wspomniałeś powyżej .. gdzie muszę pu t to? (używając środowiska Eclipse jako IDE) – Hirnhamster

+2

Należy również ustawić "java.util.logging.ConsoleHandler.level = FINEST" – Gili

+1

@Hirnhamster, w zakładce Uruchom konfigurację - Argumenty dodać do sekcji argumentów VM. – RealHowTo

0

Użyj czegoś takiego jak tcpdump, który może zrzucić rzeczywiste pakiety sieciowe emitowane lub odbierane przez twój komputer.

4

tcpdump będzie działał, ale może być trudno zrobić to, co chcesz. NetCat jest bardziej przyjazny dla użytkownika (tutaj jest strona projektu: http://netcat.sourceforge.net/ - większość platform Unix już ją uwzględnia).

nc -l 9999 

To nasłuchuje na porcie TCP 9999, a gdy klient HTTP łączy, to będzie wydrukować pełny tekst wniosku.