2009-01-26 16 views
26

Próbuję poprawić dokument Java HTML trochę, ale mam problemy z HttpUrlConntion. Jedna rzecz jest taka, że ​​niektóre serwery blokują żądanie, jeśli agent użytkownika jest maszyną wirtualną Java. Innym problemem jest to, że HttpUrlConnection nie ustawia pola nagłówka Referrer lub Location. Ponieważ kilka witryn używa tych pól do sprawdzenia, czy treści były dostępne z ich własnej strony, jestem tu również zablokowany. O ile widzę, jedynym rozwiązaniem jest zastąpienie obsługi URL protokołu HTTP. Czy istnieje sposób modyfikowania domyślnego programu obsługi HTTP?Jak zmodyfikować nagłówek HttpUrlConnection

Odpowiedz

42

Otwórz URL z URL.openConnection. Opcjonalnie odlana do HttpURLConnection. Zadzwoń pod numer URLConnection.setRequestProperty/addRequestProperty.

Domyślna wartość nagłówka User-Agent jest ustawiana z właściwości systemowej "http.agent". PlugIn i WebStart pozwalają ustawić tę właściwość.

+10

Upewnij się, że w razie potrzeby rozróżniaj metody addRequestProperty i setRequestProperty. Ustawiony wariant zastępuje istniejący nagłówek tym samym kluczem. Dodany wariant dodaje i dodatkową instancję nagłówka, jeśli już istnieje. – laz

+0

Czy 'addRequestProperty' dodaje nową linię (innymi słowy, żądania będą miały 2 wiersze z ** identycznymi kluczami **) lub czy doda ona przecinek i nową wartość do istniejącej linii? – Pacerier

+0

@leoger Dzięki za pomoc = D – Pacerier

2

Jeśli korzystasz z Apache HttpClient do zarządzania programową łącznością HTTP, otrzymasz niezwykle przydatny interfejs API, który umożliwia tworzenie połączeń (i opcjonalnie automatyczne ponowne łączenie po niepowodzeniu), ustawienie nagłówków, postów i uzyskiwania, przydatnych metod pobierania zwróconych treści i o wiele wiele więcej.

+11

Wiem, że ten wpis jest stary, ale jeśli ktoś go czyta: HttpURLConnection jest teraz preferowany w stosunku do HttpClient, zobacz [ten post na blogu] (http://android-developers.blogspot.com/2011/09/androids-http-clients. html) dla informacji. – kamituel

0

Rozwiązałem mój problem. Możemy po prostu wysłać nagłówek do aplikacji/json i przekazać ciało jako obiekt json. To po prostu rozwiązuje problem.