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.