Ich versuche nur, JSON herunterzuladen und in ein Objekt zu deserialisieren. Ich bin noch nicht so weit gekommen, den JSON herunterzuladen.
Fast jedes einzelne HttpClient-Beispiel, das ich finden kann, einschließlich der auf der Apache-Site, sieht ungefähr so aus wie ...
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
public void blah() {
HttpClient client = new DefaultHttpClient();
...
}
Netbeans teilt mir jedoch mit, dass dies DefaultHttpClient
veraltet ist. Ich habe versucht, nach DefaultHttpClient deprecated
so vielen anderen Variationen zu googeln, wie ich mir vorstellen kann, und kann keine nützlichen Ergebnisse finden, daher fehlt mir offensichtlich etwas.
Was ist der richtige Java7-Weg, um den Inhalt einer Webseite herunterzuladen? Gibt es wirklich keinen anständigen HTTP-Client als Teil der Sprache? Ich finde das schwer zu glauben.
Meine Maven-Abhängigkeit dafür ist ...
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>LATEST</version>
<type>jar</type>
</dependency>
DefaultHttpClient
ist definitiv nicht veraltet. Welche Version haben Sie in Ihrem POM angegeben?Antworten:
Relevante Importe:
Verwendung:
EDIT (nach Jules 'Vorschlag):
Da das
build()
Verfahren eine gibt ,CloseableHttpClient
die ist-aAutoClosable
, können Sie die Erklärung in einer Try-mit-Ressourcen - Anweisung (Java 7+) platzieren:quelle
CloseableHttpClient
, den Sie nach der Verwendung schließen sollten. Es wird implementiertAutoCloseable
, sodass Sie es in einer Try-with-Resources-Anweisung in Java 7+ verwenden können :try (CloseableHttpClient httpclient = ...) { ... }
.create()
statischen Methode zurückgegebenen HttpClientBuilder-Instanz festhalten ? Oder können wir einfach anrufen,create()
wann immer wir einen brauchen? ... Übrigensimport org.apache.http.impl.client.HttpClientBuilder
für jeden, der das braucht. [Mag keine Antworten ohne Importanweisungen. Keine Sorge, ich habe immer noch positiv gestimmt :)]IMHO ist die akzeptierte Antwort korrekt, aber es fehlt etwas "Lehren", da es nicht erklärt, wie man auf die Antwort kommt. Schauen Sie sich für alle veralteten Klassen das JavaDoc an (wenn Sie es nicht haben, laden Sie es herunter oder gehen Sie online ), gibt es einen Hinweis darauf, welche Klasse zum Ersetzen des alten Codes verwendet werden soll. Natürlich wird es Ihnen nicht alles erzählen, aber dies ist ein Anfang. Beispiel:
Jetzt haben Sie die zu verwendende Klasse
HttpClientBuilder
, da es keinen Konstruktor gibt, um eine Builder- Instanz abzurufen, können Sie davon ausgehen, dass stattdessen eine statische Methode vorhanden sein muss :create
. Sobald Sie den Builder haben, können Sie auch erraten, dass es wie bei den meisten Buildern eine Build-Methode gibt , also:AutoClosable:
Wie Jules in den Kommentaren angedeutet hat, wird die zurückgegebene Klasse implementiert
java.io.Closable
. Wenn Sie also Java 7 oder höher verwenden, können Sie jetzt Folgendes tun:Der Vorteil ist, dass Sie sich nicht mit finally und nulls befassen müssen.
Andere relevante Informationen
Lesen Sie auch Informationen zum Verbindungspooling und legen Sie die Zeitüberschreitungen fest .
quelle
Beispiele aus Apache verwenden dies:
Die Klasse
org.apache.http.impl.client.HttpClients
ist seit Version 4.3 da.Der Code für
HttpClients.createDefault()
ist derselbe wie die hier akzeptierte Antwort .quelle
Es wurde in der Version,
4.3-alpha1
die Sie verwenden, aufgrund derLATEST
Versionsspezifikation veraltet . Wenn Sie sich das Javadoc der Klasse ansehen, erfahren Sie, was Sie stattdessen verwenden sollen :HttpClientBuilder
.In der neuesten stabilen Version (
4.2.3
)DefaultHttpClient
ist das noch nicht veraltet.quelle
Versuchen Sie
jcabi-http
es mit einem fließenden Java-HTTP-Client, zum Beispiel:Überprüfen Sie auch diesen Blog-Beitrag: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html
quelle
Ich würde empfehlen, die folgende Methode zu verwenden, wenn Sie nur die JSON-Daten lesen möchten.
quelle
DefaultHttpClient
ist veraltet und Sie schlagen vor, es in Ihrer Antwort zu verwenden ...Verwenden Sie HttpClientBuilder die bauen Httpclient anstelle von DefaultHttpClient
Ex:
quelle
new HttpClientBuilder()
und nichtHttpClientBuilder.create()
?Sie können die folgende Maven-Abhängigkeit hinzufügen.
Sie können den folgenden Import in Ihren Java-Code verwenden.
Sie können den folgenden Codeblock in Ihrem Java-Code verwenden.
quelle
Dies ist die Lösung, die ich auf das Problem angewendet habe, das httpclient in dieser Version von Android 22 veraltet hat
quelle
Für die ursprüngliche Ausgabe möchte ich Sie bitten, die folgende Logik anzuwenden:
quelle