Olá pessoal,
No post anterior Requisição HTTP com Java Application Parte 1 , falei um pouco sobre como obter o conteúdo de uma página web. Mas nem sempre somente o conteúdo de uma página nos interessa.
Na maioria das vezes necessitamos que de uma interação com a página (ou páginas) por meio de troca de informação, ou seja, enviamos dados, a página processa os dados e nos retorna a informação.
Para isso iremos trabalhar com o objeto URLConnection, objeto existente no pacote java.net.
Veja o exemplo abaixo:
package teste.communication; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; public class TesteComunicacao { public static void main(String[] args) throws MalformedURLException, IOException { try{ // monta estrutura de parametros a serem eviados String data = URLEncoder.encode( "nome", "UTF-8" ) + "=" + URLEncoder.encode( "Fernando", "UTF-8" ); URL url = new URL( "http://localhost/get_name.php" ); URLConnection urlConnection = url.openConnection(); // envia dados urlConnection.setDoOutput(true); OutputStreamWriter outputWriter = new OutputStreamWriter(urlConnection.getOutputStream()); outputWriter.write(data); outputWriter.flush(); // Obtem as respostas InputStreamReader inputReader = new InputStreamReader(urlConnection.getInputStream()); BufferedReader bufferedReader = new BufferedReader( inputReader ); System.out.println( "\n** retorno da página web **" ); String linha = ""; while ( (linha = bufferedReader.readLine()) != null){ System.out.println(linha); } } catch (Exception e) { System.out.println( e.getMessage() ); } } }
Após instânciar o objeto URL, podemos obter o objeto URLConnection através do seu método openConnection.
O método urlConnection.setDoOutput(true); é executado para informar que será enviado parâmetros.
Depois obtemos o stream de saída e enviamos os dados (obs: esses dados são enviados via método POST).
O retorno é obtido através do método urlConnection.getInputStream que é tratado por meio do objeto InputStreamReader.
Para simular o processamento dos dados enviados gerei um arquivo PHP com o seguinte código:
<?php
$response = $_POST['nome'];
echo "Conteúdo recebido: ";
echo $response;
?>
Ele simplesmente lê o dado recebido e gera uma resposta apartir das informações obtidas.
Enjoy

Este post é o que eu precisava, muito bom!
só tenho uma pergunta: Como fazer para efetuar várias requisições ao php?
exemplo, se eu tivesse $_POST[email], $_POST[idade]…
Como proceder nesta situação?
Eu tentei dar um data += … porém não funcionou…
Também tentei inserir um outputWriter.write(data2); porém também não funcionou.
Obrigado André.
Não fiz nenhum testa relacionado a isso.
Mas acredito que seja necessário concatenar os dados no formato de parâmetros passados via GET.
Para isso formate os parâmetros da requisição para que a variável data contenha os dados da seguinte forma: email=teste@xx.com&idade=15
Dica: utilize encode no texto de email (nessa explicação não fiz isso), senão haverá erro devido aos caracteres especiais.
Espero ter ajudado.
Abraço