Wszystko, co próbuję zrobić, to pobrać trochę JSON i deserializować go do obiektu. Nie udało mi się jeszcze pobrać JSON.
Prawie każdy przykład HttpClient, który mogę znaleźć, w tym te na stronie Apache, wygląda mniej więcej tak ...
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
public void blah() {
HttpClient client = new DefaultHttpClient();
...
}
Jednak Netbeans mówi mi, że DefaultHttpClient
jest to przestarzałe. Próbowałem wyszukiwać w googlach DefaultHttpClient deprecated
i tylu innych odmianach, ile mogę wymyślić, i nie mogę znaleźć żadnych przydatnych wyników, więc oczywiście czegoś mi brakuje.
Jaki jest właściwy sposób pobierania zawartości strony internetowej za pomocą języka Java7? Czy naprawdę nie ma przyzwoitego klienta HTTP jako części języka? Trudno mi w to uwierzyć.
Moja zależność od Mavena to ...
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>LATEST</version>
<type>jar</type>
</dependency>
java
apache-httpclient-4.x
apache-commons-httpclient
Podstawowy
źródło
źródło
DefaultHttpClient
zdecydowanie nie jest przestarzałe. Jaką wersję podałeś w swoim POM?Odpowiedzi:
Odpowiedni przywóz:
Stosowanie:
EDYCJA (za sugestią Julesa):
Ponieważ
build()
metoda zwracaCloseableHttpClient
które jest-aAutoClosable
, możesz umieścić deklarację w instrukcji try-with-resources (Java 7+):źródło
CloseableHttpClient
, którą należy zamknąć po użyciu. ImplementujeAutoCloseable
, dzięki czemu można używać go w try-with-zasobów oświadczenia w Javie 7+:try (CloseableHttpClient httpclient = ...) { ... }
.create()
metodę statyczną? Czy możemy po prostu zadzwonić,create()
kiedy tylko będziemy go potrzebować? ... Przy okazji,import org.apache.http.impl.client.HttpClientBuilder
dla każdego, kto tego potrzebuje. [Nie lubi odpowiedzi bez instrukcji importu. Nie martw się, nadal zagłosowałem za :)]IMHO przyjęta odpowiedź jest poprawna, ale pomija pewne „nauczanie”, ponieważ nie wyjaśnia, jak znaleźć odpowiedź. W przypadku wszystkich przestarzałych klas spójrz na JavaDoc (jeśli go nie masz, pobierz lub przejdź do trybu online ), podpowie ona, której klasy użyć do zastąpienia starego kodu. Oczywiście nie powie Ci wszystkiego, ale to jest początek. Przykład:
Teraz masz klasę do używania,
HttpClientBuilder
jak nie ma konstruktora, aby uzyskać budowniczy instancji może się domyślić, że musi istnieć sposób statyczny zamiast:create
. Gdy już masz konstruktora, możesz również zgadnąć, że jak w przypadku większości budowniczych istnieje metoda budowania , a zatem:AutoClosable:
Jak zasugerował Jules w komentarzach, zwracana klasa implementuje
java.io.Closable
, więc jeśli używasz Java 7 lub nowszej, możesz teraz zrobić:Zaletą jest to, że nie musisz zajmować się ostatecznie i zerami.
Inne istotne informacje
Przeczytaj również o buforowaniu połączeń i ustaw limity czasu .
źródło
Przykłady z Apache używają tego:
Klasa
org.apache.http.impl.client.HttpClients
istnieje od wersji 4.3.Kod
HttpClients.createDefault()
jest taki sam, jak zaakceptowana odpowiedź tutaj.źródło
Został uznany za przestarzały w wersji,
4.3-alpha1
której używasz ze względu naLATEST
specyfikację wersji. Jeśli spojrzysz na javadoc klasy, powie ci, czego zamiast tego użyć:HttpClientBuilder
.W najnowszej stabilnej wersji (
4.2.3
)DefaultHttpClient
nie jest jeszcze przestarzały.źródło
Spróbuj
jcabi-http
, który jest płynnym klientem HTTP języka Java, na przykład:Sprawdź także ten wpis na blogu: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html
źródło
Sugerowałbym użycie poniższej metody, jeśli próbujesz odczytać tylko dane json.
źródło
DefaultHttpClient
jest przestarzałe i sugerujesz użycie go w swojej odpowiedzi ...Użyj HttpClientBuilder, aby skompilować HttpClient zamiast używać DefaultHttpClient
dawny:
źródło
new HttpClientBuilder()
a nieHttpClientBuilder.create()
?Możesz dodać następującą zależność Maven.
Możesz użyć następującego importu w swoim kodzie java.
Możesz użyć następującego bloku kodu w swoim kodzie java.
źródło
To jest rozwiązanie, które zastosowałem w przypadku problemu, który httpclient stał się przestarzały w tej wersji Androida 22
źródło
W przypadku pierwotnego wydania proszę o zastosowanie poniższej logiki:
źródło