Dicas de migração do HttpClient 3.1 para o HttpClient 4.x

Este post é para aqueles que estavam usando o Apache HttpClient 3.1 até hoje e agora decidiu pagar o preço e migrar para HttpClient 4.x. Atualização de bibliotecas da Fundação Apache geralmente é algo bem tranquilo, entretanto o HttpClient 4.x foi completamente reescrito e a versão 4.x não é compatível com as versões anteriores. Além disso o HttpClient não faz mais parte do Apache Commons. Aqui estão as alterações que você precisará fazer para migrar para o HttpClient 4.x. Este post é um mini tutorial para aqueles que estão migrando de versões anteriores do HttpClient para a versão 4.x. O tempo necessário para migrar dependerá de quantas referências você precisará alterar. Então mãos a obra.

1. Substitua o jar commons-HttpClient-3.1.jar pelos jars httpclient-4.0.3.jar e httpmime-4.0.3.jar. Além desses você também precisará do httpcore-4.0.1.jar.

Se você utiliza o Maven certamente você declarava a dependência abaixo:

<dependency>
    <groupid>commons-httpclient</groupid>
    <artifactid>commons-httpclient</artifactid>
    <version>3.1</version>
</dependency>

Agora, como já foi dito, são três jars e você irá declarar as dependências da seguinte forma:

<dependency>
    <groupid>org.apache.httpcomponents</groupid>
    <artifactid>httpclient</artifactid>
    <version>4.0.3</version>
</dependency>

<dependency>
    <groupid>org.apache.httpcomponents</groupid>
    <artifactid>httpmime</artifactid>
    <version>4.0.3</version>
</dependency>

<dependency>
    <groupid>org.apache.httpcomponents</groupid>
    <artifactid>httpcore</artifactid>
    <version>4.0.1</version>
</dependency> 

2. Altere suas declarações de importação de org.apache.commons.httpclient.* para org.apache.http.*. Por exemplo, altere disso:

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.ConnectTimeoutException;

para isso:

import org.apache.http.client.HttpClient;
import org.apache.http.HttpStatus;
import org.apache.http.HttpException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.HttpResponse;
import org.apache.http.impl.client.DefaultHttpClient;

Observe que além da adição de HttpResponse e DefaultHttpClient ocorreram outras alterações sutis na forma de se trabalhar com o HttpClient.

3. Agora altere o seu código a partir do velho HttpClient para o novo.

HttpClient 3.1:

HttpClient client = new HttpClient();
GetMethod method = new GetMethod(url);
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_OK) {
    InputStream is = method.getResponseBodyAsStream();
    // utilizar o input stream da forma que necessitar
}
method.releaseConnection();

HttpClient 4.x:

HttpClient client = new DefaultHttpClient();
HttpGet method = new HttpGet(url);
HttpResponse httpResponse = client.execute(method);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
    InputStream is = httpResponse.getEntity().getContent();
    // utilizar o input stream da forma que necessitar
}

Obviamente nos exemplos acima não utilizamos todas as funcionalidades do novo HttpClient, mas a maioria das alterações são semelhantes às listadas acima. Para ver exemplos mais detalhados sobre como usar HttpClient 4.x, visite o HttpClient 4.0.3 Tutorial. Se você tiver outras dicas sobre a migração para o HttpClient 4.x sinta-se a vontade para postar um comentário.

Treinamentos relacionados com este post














Leandro Costa

Sou desenvolvedor de software a desde 2008, além de programar gosto de esportes de aventura como rapel, tirolesa, trilhas de bike, apreciador de cervejas, baladas, motos e do bom e velho Rock’n Roll também gosto de história, ficção científica e de tecnologia. Atualmente sou consultor de Agile Software Delivery na Erudio Training e instrutor na Udemy.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *