Java Tips: Lendo Cookies de Requisição com HTTPClient
Nesta dica Java, vamos demonstrar como ter acesso aos cookies definidos por determinado site após efeutar uma requisição HTTP (GET ou POST). Para isso vamos usar a lib HttpClient do Apache, conhecida como Apache HttpComponents. Esta é a nova lib do Apache para trabalhar com requisições HTTP que foi re-escrita para substituir a antiga lib Commons HttpClient.
Para maiores detalhes sobre a nova lib HttpClient, acesse: http://hc.apache.org/
Ao desenvolver determinada aplicação, tive a necessidade de manipular os cookies de uma resposta de requisição. Tive dificuldade de achar algo simples na internet que me fosse realmente útil. Após conseguir o que eu queria com um certo esforço resolvi compartilhar essa dica com vocês. Portanto, segue ele abaixo.
O código abaixo esta bem documentado e de fácil entendimento. Torço para que seja útil.
import java.io.IOException; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CookieStore; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.protocol.ClientContext; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; public class ShowCookies { public static void main(String[] args) { // instância da classe do client HTTP DefaultHttpClient client = new DefaultHttpClient(); // objeto onde serão armazenados as informações relativas aos cookies CookieStore cookieStore = new BasicCookieStore(); // criação de um contexto utilizado nas requisições para que possamos acessar // as informações dos cookies HttpContext localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); // instância o objeto HttpGet HttpGet httpget = new HttpGet("http://www.google.com/"); try { // efetua a resquisição GET HttpResponse response = client.execute(httpget, localContext); // trabalha a resposta da requisição HttpEntity entity = response.getEntity(); if (entity != null) { String responseBody = EntityUtils.toString(entity); // exibe o conteúdo do corpo da resposta da requisição GET System.out.println(responseBody); // exibe os conteúdo dos cookies definidos pelo domínio List<Cookie> cookies = cookieStore.getCookies(); for(Cookie cookie : cookies) { System.out.println("Cookie: " + cookie.getName() + "=" + cookie.getValue()); } } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }