Todo lo que intento hacer es descargar algunos JSON y deserializarlos en un objeto. Todavía no he llegado a descargar el JSON.
Casi todos los ejemplos de HttpClient que puedo encontrar, incluidos los del sitio apache, se parecen a ...
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
public void blah() {
HttpClient client = new DefaultHttpClient();
...
}
Sin embargo, Netbeans me dice que DefaultHttpClient
está en desuso. He intentado buscar en Google DefaultHttpClient deprecated
y en tantas otras variaciones en las que puedo pensar y no puedo encontrar ningún resultado útil, por lo que obviamente me falta algo.
¿Cuál es la forma correcta de Java7 para descargar el contenido de una página web? ¿Realmente no hay un Http Client decente como parte del lenguaje? Me parece difícil de creer.
Mi dependencia de Maven para esto es ...
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>LATEST</version>
<type>jar</type>
</dependency>
DefaultHttpClient
Definitivamente no está en desuso. ¿Qué versión especificó en su POM?Respuestas:
Importaciones relevantes:
Uso:
EDITAR (después de la sugerencia de Jules):
A medida que el
build()
método devuelve unCloseableHttpClient
que es-aAutoClosable
, puede colocar la declaración en una declaración de prueba con recursos (Java 7+):fuente
CloseableHttpClient
, que debe cerrar después de su uso. Pone en prácticaAutoCloseable
, por lo que se puede utilizar en una sentencia try-con-recursos en Java 7+:try (CloseableHttpClient httpclient = ...) { ... }
.create()
método estático? ¿O podemos llamarcreate()
siempre que lo necesitemos? ... Por cierto,import org.apache.http.impl.client.HttpClientBuilder
para cualquiera que lo necesite. [No le gustan las respuestas sin declaraciones de importación. No se preocupe, todavía voté :)]En mi humilde opinión, la respuesta aceptada es correcta, pero se pierde un poco de "enseñanza", ya que no explica cómo llegar a la respuesta. Para todas las clases desaprobadas, mire el JavaDoc (si no lo tiene, descárguelo o conéctese a Internet ), le indicará qué clase usar para reemplazar el código anterior. Por supuesto, no te dirá todo, pero este es un comienzo. Ejemplo:
Ahora usted tiene la clase que se utiliza,
HttpClientBuilder
como no hay ningún constructor para obtener un constructor de instancia puede adivinar que debe haber un método estático en su lugar:create
. Una vez que tenga el constructor, también puede adivinar que, como para la mayoría de los constructores, hay un método de compilación , por lo tanto:Autocerrable:
Como Jules insinuó en los comentarios, la clase devuelta se implementa
java.io.Closable
, por lo que si usa Java 7 o superior, ahora puede hacer:La ventaja es que no tiene que lidiar finalmente con nulos.
Otra información relevante
También asegúrese de leer sobre la agrupación de conexiones y establecer los tiempos de espera .
fuente
Los ejemplos de Apache usan esto:
La clase
org.apache.http.impl.client.HttpClients
está allí desde la versión 4.3.El código para
HttpClients.createDefault()
es el mismo que la respuesta aceptada aquí.fuente
Se desactivó en la versión
4.3-alpha1
que usa debido a laLATEST
especificación de la versión. Si se echa un vistazo en el javadoc de la clase, le dice lo que debe utilizar en su lugar:HttpClientBuilder
.En la última versión estable (
4.2.3
)DefaultHttpClient
todavía no está en desuso.fuente
Pruebe
jcabi-http
, que es un cliente HTTP Java fluido, por ejemplo:Consulte también esta publicación de blog: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html
fuente
Sugeriría usar el siguiente método si está tratando de leer solo los datos json.
fuente
DefaultHttpClient
está en desuso y que sugieren el uso en su respuesta ...Use HttpClientBuilder para construir el HttpClient en lugar de usar DefaultHttpClient
ex:
fuente
new HttpClientBuilder()
y noHttpClientBuilder.create()
?Puede agregar la siguiente dependencia de Maven.
Puede usar la siguiente importación en su código java.
Puede usar el siguiente bloque de código en su código java.
fuente
Esta es la solución que he aplicado al problema que httpclient desaprobó en esta versión de Android 22
fuente
Para el problema original, le pediría que aplique la siguiente lógica:
fuente