Esse artigo faz parte da revista Java Magazine edição 29. Clique aqui para ler todos os artigos desta edição

OR: windowtext; FONT-FAMILY: Verdana">"FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt">Concluindo a série sobre o HttpClient, conheça com muitos exemplos, os recursos para submeter formulários, enviar arquivos e gerenciar cookies e cabeçalhos

Na primeira parte desta série apresentamos os conceitos básicos da API HttpClient e o uso do método HTTP GET. Nesta edição veremos como utilizar o método POST para enviar formulários e arquivos, além de outros recursos fundamentais, como o gerenciamento de cookies e a manipulação de cabeçalhos.

GET versus POST

Quando usamos o método GET do HTTP, as informações são enviadas diretamente na URL, sendo codificados e incluídos ao final da URL, na parte chamada query-string. No entanto, há muitos casos em que requisições GET não são adequadas. O tamanho da query-string é limitado quanto ao total de caracteres, e só é possível enviar informações textuais. Outra questão é relacionada à segurança. Passar via GET dados sigilosos como senhas ou números de cartão de crédito expõe esses dados na URL. E mesmo que a URL seja ocultada, por exemplo com o uso de frames escondidos, os dados geralmente ficam registrados no log de visitas do servidor web ou de um proxy/firewall, deixando as informações acessíveis para qualquer um que tenha acesso a esses logs.

Para reduzir a exposição dos dados, e para enviar dados binários ou textos longos, será necessário usar o método POST do HTTP.

Envio básico via POST

Com o método POST é possível enviar um tamanho praticamente ilimitado de informações ao servidor. POST é o método HTTP mais usado na submissão de formulários HTML.

Para que POST realmente seja usado ao submeter o formulário HTML, deve ser especificado method=”post” no tag

. Caso contrário, será usado GET para submeter os dados (que são codificados e anexados à URL pelo próprio navegador web).

Através do método POST, também é possível enviar arquivos binários ao servidor. Com o HttpClient, usamos a classe PostMethod, que fornece funcionalidades variadas para a manipulação de parâmetros HTTP no corpo de uma requisição.

Três métodos permitem adicionar parâmetros: as sobrecargas addParameter(NameValuePair par) e addParameter(String nomeParam, String valorParam) definem um parâmetro por vez. Já addParameters(NameValuePair[] params) recebe um array de pares nome-valor. Para alterar o valor de um parâmetro já adicionado, usa-se setParameter(NameValuePair par). Caso o parâmetro, (identificado pelo nome) não for encontrado ele é adicionado; se for, ele é substituído com o valor fornecido. Por fim, o método setRequestBody() recebe um array de objetos NameValuePair e modifica o valor de todos os parâmetros especificados que já existam, criando parâmetros não-encontrados da mesma maneira que setParameter().

O exemplo na Listagem 1 demonstra como adicionar parâmetros ao corpo de uma requisição POST e chama um JSP (Listagem 2) que exibe os dados enviados.

Envio de arquivos

Quando precisamos enviar arquivos a um servidor HTTP a solução é usar o método POST com conteúdo em múltiplas partes (multi-part content). Para isso, além de definir o método como POST no tag , devemos acrescentar o atributo enctype=”multipart/form-data”.

O formato da mensagem enviada será bastante diferente. Em vez de fornecer objetos NameValuePair a um PostMethod, passamos um MultipartRequestEntity contendo vários objetos Part.

A classe Part é abstrata, e tem duas subclasses concretas:

§       StringPart representa conteúdo textual, como o gerado ao submeter dados contidos em caixas de texto, checkboxes e outros elementos comuns de formulários HTML.

§       FilePart representa um arquivo (tendo-se definido um elemento ...

Quer ler esse conteúdo completo? Tenha acesso completo