Próbuję znaleźć odpowiednik Java do Groovy'ego:
String content = "http://www.google.com".toURL().getText();
Chcę czytać treść z adresu URL na ciąg. Nie chcę zanieczyszczać mojego kodu buforowanymi strumieniami i pętlami dla tak prostego zadania. Zajrzałem do HttpClient Apache, ale nie widzę też implementacji jednego lub dwóch wierszy.
Odpowiedzi:
Teraz, gdy minęło trochę czasu od zaakceptowania oryginalnej odpowiedzi, istnieje lepsze podejście:
Jeśli chcesz nieco pełniejszą implementację, która nie jest pojedynczą linią, zrób to:
źródło
Scanner#close()
później.String result = scanner.hasNext() ? scanner.next() : "";
sobie z tym poradzić.Ta odpowiedź odnosi się do starszej wersji Java. Możesz spojrzeć na odpowiedź ccleve.
Oto tradycyjny sposób na zrobienie tego:
Jak zasugerował @extraneon , ioutils pozwala ci to zrobić w bardzo elokwentny sposób, wciąż w duchu Java:
źródło
getText
, przekazać ciąg adresu URL jako parametr i mieć jedną linijkę:String content = URLConnectionReader.getText("http://www.yahoo.com/");
Lub po prostu użyj Apache Commons
IOUtils.toString(URL url)
lub wariantu, który również akceptuje parametr kodowania.źródło
IOUtils.toString(URL)
jest to przestarzałe.IOUtils.toString(URL url, String encoding)
jest preferowany.IOUtils.toString(url, (Charset) null)
osiągnąć podobny wynik.Teraz, gdy minęło więcej czasu, oto sposób na zrobienie tego w Javie 8:
źródło
http://www.worldcat.org/webservices/catalog/search/opensearch
usłudze sieciowej, otrzymuję tylko pierwsze dwa wiersze XML.Jest jeszcze lepszy sposób od wersji Java 9:
Podobnie jak w oryginalnym groovym przykładzie, zakłada się, że zawartość jest zakodowana w UTF-8. (Jeśli potrzebujesz czegoś sprytniejszego, musisz utworzyć połączenie URL i użyć go do ustalenia kodowania).
źródło
getClass().getResourceAsStream(...)
do otwierania plików tekstowych w słoiku.Dodatkowy przykład z użyciem guawy:
źródło
Jeśli masz strumień wejściowy (zobacz odpowiedź Joe), rozważ również ioutils.toString (strumień wejściowy).
http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString(java.io.InputStream )
źródło
Poniższe działa z Java 7/8, bezpiecznymi adresami URL i pokazuje, jak dodać plik cookie do żądania. Zauważ, że jest to głównie bezpośrednia kopia tej innej świetnej odpowiedzi na tej stronie , ale dodano przykład pliku cookie i wyjaśnienie, że działa również z bezpiecznymi adresami URL ;-)
Jeśli musisz połączyć się z serwerem z nieprawidłowym certyfikatem lub certyfikatem z podpisem własnym, spowoduje to wyświetlenie błędów zabezpieczeń, chyba że zaimportujesz certyfikat. Jeśli potrzebujesz tej funkcji, możesz rozważyć podejście opisane w tej odpowiedzi na to powiązane pytanie w StackOverflow.
Przykład
wyjścia
Kod
źródło
Oto cudowna odpowiedź Jeanne, ale zapakowana w uporządkowaną funkcję dla muppetów takich jak ja:
źródło
Adres URL do ciągu w czystej Javie
Przykładowe wezwanie
Realizacja
Możesz użyć metody opisanej w tej odpowiedzi, na temat Jak odczytać adres URL do obiektu InputStream i połączyć go z tą odpowiedzią na temat sposobu odczytywania InputStream na String .
Wynik będzie podobny
Plusy
To jest czysta Java
Można go łatwo ulepszyć, dodając różne nagłówki (zamiast przekazywania pustego obiektu, jak w powyższym przykładzie), uwierzytelnianie itp.
Obsługiwana jest obsługa przełączników protokołów
źródło