httpget - org apache http client methods httppost example java




Java HttpClient descontinuado-Quão difícil pode ser? (7)

Tudo o que estou tentando fazer é baixar alguns JSON e desserializá-lo em um objeto. Ainda não baixei o JSON.

Quase todos os exemplos de HttpClient que eu posso encontrar, incluindo aqueles no site do apache, parecem algo como ...

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;

public void blah() {
    HttpClient client = new DefaultHttpClient();
    ...
}

No entanto, o NetBeans me diz que DefaultHttpClient está obsoleto. Eu tentei googling para DefaultHttpClient deprecated e como muitas outras variações que posso pensar e não consigo encontrar nenhum resultado útil, então eu obviamente estou faltando alguma coisa.

Qual é o caminho correto do Java7 para baixar o conteúdo de uma página da Web? Existe realmente nenhum cliente Http decente como parte da linguagem? Acho isso difícil de acreditar.

Minha dependência Maven para isso é ...

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>LATEST</version>
    <type>jar</type>
</dependency>

Ele foi reprovado na versão 4.3-alpha1 que você usa devido à especificação de versão LATEST. Se você der uma olhada no javadoc da classe, ele lhe dirá o que usar: HttpClientBuilder .

Na última versão estável ( 4.2.3 ), o DefaultHttpClient ainda não está obsoleto.


Esta é a solução que eu apliquei ao problema que o httpclient preteriu nesta versão do android 22

 public static String getContenxtWeb(String urlS) {
    String pagina = "", devuelve = "";
    URL url;
    try {
        url = new URL(urlS);
        HttpURLConnection conexion = (HttpURLConnection) url
                .openConnection();
        conexion.setRequestProperty("User-Agent",
                "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
        if (conexion.getResponseCode() == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(conexion.getInputStream()));
            String linea = reader.readLine();
            while (linea != null) {
                pagina += linea;
                linea = reader.readLine();
            }
            reader.close();

            devuelve = pagina;
        } else {
            conexion.disconnect();
            return null;
        }
        conexion.disconnect();
        return devuelve;
    } catch (Exception ex) {
        return devuelve;
    }
}

IMHO a resposta aceita está correta, mas perde um pouco de "ensino", pois não explica como chegar à resposta. Para todas as classes reprovadas, observe o JavaDoc (se você não o fizer, faça o download ou JavaDoc ), ele indicará qual classe usar para substituir o código antigo. Claro que não vai te contar tudo, mas isso é um começo. Exemplo:

...
 *
 * @deprecated (4.3) use {@link HttpClientBuilder}.  <----- THE HINT IS HERE !
 */
@ThreadSafe
@Deprecated
public class DefaultHttpClient extends AbstractHttpClient {

Agora você tem a classe para usar, HttpClientBuilder , como não há nenhum construtor para obter uma instância do construtor, você pode imaginar que deve haver um método estático: create . Depois de ter o construtor, também é possível adivinhar que, para a maioria dos construtores, existe um método de construção , portanto:

org.apache.http.impl.client.HttpClientBuilder.create().build();

AutoClosable:

Como Jules sugeriu nos comentários, a classe retornada implementa java.io.Closable , portanto, se você usar o Java 7 ou superior, poderá fazer agora:

    try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {...}

A vantagem é que você não tem que lidar com finalmente e nulos.

Outras informações relevantes

Certifique-se também de ler sobre o pool de conexões e definir os timeouts .


Importações relevantes:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.IOException;

Uso:

HttpClient httpClient = HttpClientBuilder.create().build();

EDIT (após a sugestão de Jules):

Como o método build() retorna um CloseableHttpClient que é um AutoClosable , você pode colocar a declaração em uma instrução try-with-resources (Java 7+):

try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {

    // use httpClient (no need to close it explicitly)

} catch (IOException e) {

    // handle

}

Tente jcabi-http , que é um cliente HTTP Java fluente, por exemplo:

String html = new JdkRequest("https://www.google.com")
  .header(HttpHeaders.ACCEPT, MediaType.TEXT_HTML)
  .fetch()
  .as(HttpResponse.class)
  .assertStatus(HttpURLConnection.HTTP_OK)
  .body();

Veja também este post no blog: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html


Use HttpClientBuilder para criar o HttpClient vez de usar DefaultHttpClient

ex:

MinimalHttpClient httpclient = new HttpClientBuilder().build();

 // Prepare a request object
 HttpGet httpget = new HttpGet("http://www.apache.org/");

Você pode adicionar a seguinte dependência do Maven.

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.5.1</version>
    </dependency>

Você pode usar a seguinte importação no seu código java.

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGett;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.methods.HttpUriRequest;

Você pode usar o seguinte bloco de código no seu código java.

HttpClient client = HttpClientBuilder.create().build();
HttpUriRequest httpUriRequest = new HttpGet("http://example.domain/someuri");

HttpResponse response = client.execute(httpUriRequest);
System.out.println("Response:"+response);






apache-commons-httpclient