{"id":450,"date":"2013-01-24T05:11:23","date_gmt":"2013-01-24T08:11:23","guid":{"rendered":"https:\/\/www.erudio.com.br\/blog\/?p=450"},"modified":"2013-01-24T05:11:23","modified_gmt":"2013-01-24T08:11:23","slug":"dicas-de-migrando-do-httpclient-3-1-para-o-httpclient-4-x","status":"publish","type":"post","link":"https:\/\/www.erudio.com.br\/blog\/dicas-de-migrando-do-httpclient-3-1-para-o-httpclient-4-x\/","title":{"rendered":"Dicas de migra\u00e7\u00e3o do HttpClient 3.1 para o HttpClient 4.x"},"content":{"rendered":"<p>Este post \u00e9 para aqueles que estavam usando o <strong>Apache HttpClient 3.1<\/strong> at\u00e9 hoje e agora decidiu pagar o pre\u00e7o e migrar para <strong>HttpClient 4.x<\/strong>. Atualiza\u00e7\u00e3o de bibliotecas da Funda\u00e7\u00e3o Apache geralmente \u00e9 algo bem tranquilo, entretanto o HttpClient 4.x foi completamente reescrito e a vers\u00e3o 4.x n\u00e3o \u00e9 compat\u00edvel com as vers\u00f5es anteriores. Al\u00e9m disso o <strong>HttpClient<\/strong> n\u00e3o faz mais parte do <strong>Apache Commons<\/strong>. Aqui est\u00e3o as altera\u00e7\u00f5es que voc\u00ea precisar\u00e1 fazer para migrar para o HttpClient 4.x. Este post \u00e9 um mini tutorial para aqueles que est\u00e3o migrando de vers\u00f5es anteriores do HttpClient para a vers\u00e3o 4.x. O tempo necess\u00e1rio para  migrar depender\u00e1 de quantas refer\u00eancias voc\u00ea precisar\u00e1 alterar. Ent\u00e3o m\u00e3os a obra.<\/p>\n<p>1. Substitua o jar <strong>commons-HttpClient-3.1.jar<\/strong> pelos jars <strong>httpclient-4.0.3.jar<\/strong> e <strong>httpmime-4.0.3.jar<\/strong>. Al\u00e9m desses voc\u00ea tamb\u00e9m precisar\u00e1 do <strong>httpcore-4.0.1.jar<\/strong>.<\/p>\n<p>Se voc\u00ea utiliza o Maven certamente voc\u00ea declarava a depend\u00eancia abaixo:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;dependency&gt;\n    &lt;groupId&gt;commons-httpclient&lt;\/groupId&gt;\n    &lt;artifactId&gt;commons-httpclient&lt;\/artifactId&gt;\n    &lt;version&gt;3.1&lt;\/version&gt;\n&lt;\/dependency&gt;\n<\/pre>\n<p>Agora, como j\u00e1 foi dito, s\u00e3o tr\u00eas jars e voc\u00ea ir\u00e1 declarar as depend\u00eancias da seguinte forma:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.httpcomponents&lt;\/groupId&gt;\n    &lt;artifactId&gt;httpclient&lt;\/artifactId&gt;\n    &lt;version&gt;4.0.3&lt;\/version&gt;\n&lt;\/dependency&gt;\n    \n&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.httpcomponents&lt;\/groupId&gt;\n    &lt;artifactId&gt;httpmime&lt;\/artifactId&gt;\n    &lt;version&gt;4.0.3&lt;\/version&gt;\n&lt;\/dependency&gt;\n\n&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.httpcomponents&lt;\/groupId&gt;\n    &lt;artifactId&gt;httpcore&lt;\/artifactId&gt;\n    &lt;version&gt;4.0.1&lt;\/version&gt;\n&lt;\/dependency&gt; \n<\/pre>\n<p>2. Altere suas declara\u00e7\u00f5es de importa\u00e7\u00e3o de <strong>org.apache.commons.httpclient.*<\/strong> para <strong>org.apache.http.*<\/strong>. Por exemplo, altere disso:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\nimport org.apache.commons.httpclient.HttpClient;\nimport org.apache.commons.httpclient.HttpStatus;\nimport org.apache.commons.httpclient.HttpException;\nimport org.apache.commons.httpclient.methods.GetMethod;\nimport org.apache.commons.httpclient.ConnectTimeoutException;\n<\/pre>\n<p>para isso:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\nimport org.apache.http.client.HttpClient;\nimport org.apache.http.HttpStatus;\nimport org.apache.http.HttpException;\nimport org.apache.http.client.methods.HttpGet;\nimport org.apache.http.conn.ConnectTimeoutException;\nimport org.apache.http.HttpResponse;\nimport org.apache.http.impl.client.DefaultHttpClient;\n<\/pre>\n<p>Observe que al\u00e9m da adi\u00e7\u00e3o de <strong>HttpResponse<\/strong> e <strong>DefaultHttpClient<\/strong> ocorreram outras altera\u00e7\u00f5es sutis na forma de se trabalhar com o <strong>HttpClient<\/strong>.<\/p>\n<p>3. Agora altere o seu c\u00f3digo a partir do velho <strong>HttpClient<\/strong> para o novo.<\/p>\n<p><strong>HttpClient 3.1:<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\nHttpClient client = new HttpClient();\nGetMethod method = new GetMethod(url);\nint statusCode = client.executeMethod(method);\nif (statusCode == HttpStatus.SC_OK) {\n    InputStream is = method.getResponseBodyAsStream();\n    \/\/ utilizar o input stream da forma que necessitar\n}\nmethod.releaseConnection();\n<\/pre>\n<p><strong>HttpClient 4.x:<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\nHttpClient client = new DefaultHttpClient();\nHttpGet method = new HttpGet(url);\nHttpResponse httpResponse = client.execute(method);\nint statusCode = httpResponse.getStatusLine().getStatusCode();\nif (statusCode == HttpStatus.SC_OK) {\n    InputStream is = httpResponse.getEntity().getContent();\n    \/\/ utilizar o input stream da forma que necessitar\n}\n<\/pre>\n<p>Obviamente nos exemplos acima n\u00e3o utilizamos todas as funcionalidades do novo <strong>HttpClient<\/strong>, mas a maioria das altera\u00e7\u00f5es s\u00e3o semelhantes \u00e0s listadas acima. Para ver exemplos mais detalhados sobre como usar <strong>HttpClient 4.x<\/strong>, visite o <a href=\"http:\/\/hc.apache.org\/httpcomponents-client-ga\/tutorial\/html\/\">HttpClient 4.0.3 Tutorial<\/a>. Se voc\u00ea tiver outras dicas sobre a migra\u00e7\u00e3o para o <strong>HttpClient 4.x<\/strong> sinta-se a vontade para postar um coment\u00e1rio.<\/p>\n<h2>Treinamentos relacionados com este post<\/h2>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\"><br \/><img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\" \/><br \/><\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\" \/><br \/><\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\" \/><br \/><\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\" \/><br \/><\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\" \/><br \/><\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker_para_aws\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker para Amazon AWS Implante Apps Java e .NET com Travis CI\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/10-docker-to-aws.png\" \/><br \/><\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_kotlin\" target=\"_blank\" rel=\"noopener\"> <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Kotlin para DEVs Java: Aprenda a Linguagem Padr\u00e3o do Android\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/20-kotlin.png\" \/><br \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este post \u00e9 para aqueles que estavam usando o Apache HttpClient 3.1 at\u00e9 hoje e agora decidiu pagar o pre\u00e7o e migrar para HttpClient 4.x. Atualiza\u00e7\u00e3o de bibliotecas da Funda\u00e7\u00e3o Apache geralmente \u00e9 algo bem tranquilo, entretanto o HttpClient 4.x foi completamente reescrito e a vers\u00e3o 4.x n\u00e3o \u00e9 compat\u00edvel com as vers\u00f5es anteriores. Al\u00e9m [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7,9,42],"tags":[128,130,168],"_links":{"self":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/450"}],"collection":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/comments?post=450"}],"version-history":[{"count":0,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/450\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media?parent=450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/categories?post=450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/tags?post=450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}