Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alan Correa FACOS

Enviar dados Java via post para uma página Web .PHP

Recommended Posts

Olá pessoal, estou desenvolvendo um sistema em java que tem um numero de série qualquer (variável Id) e um método para pegar o endereço Mac de uma máquina. Ok. Até aqui tudo bem.

Agora preciso de um método que envie o "Id" e "endereço Mac" para uma página web .php, pelo método POST. e depois, abra o navegador e o endereço web.

Obrigado pela atenção. Segue as classes e métodos que já criei

METODO E CLASSE PARA MUDAR Id

package projetofinaltiago;
public class Id {


String id = null;
public void mudaId(String novoId) {
	id = novoId;
}
public void exibeDados() {
	System.out.println("Número Serial de Id: " + id);
}
}

CLASSE PRINCIPAL

 

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import projetofinaltiago.Id;

public class Main{

  public static void main(String[] args){

     Id id1 = new Id ();
     id1.mudaId ("7897hgf");
     id1.exibeDados ();

InetAddress ip;
try {

	ip = InetAddress.getLocalHost();
	//System.out.println("Current IP address : " + ip.getHostAddress());

	NetworkInterface network = NetworkInterface.getByInetAddress(ip);

	byte[] mac = network.getHardwareAddress();

	System.out.print("Endereço MAC: ");

	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < mac.length; i++) {
		sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
	}
	System.out.println(sb.toString());

} catch (UnknownHostException e) {

	e.printStackTrace();

} catch (SocketException e){

	e.printStackTrace();

}
  }


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sei como fazer envio de dados via POST a partir de uma aplicação desktop. Mas se servir, você pode enviar via GET dessa maneira:

try {  
  Desktop.getDesktop().browse(new URI( "http://www.sitio.com.br/index.php?param1=1&param2=2"));  
} catch (Exception ex) {  
  ex.printStackTrace();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só...

eu inclui sua sujestão...porém abre a página e não escreve os dados que eu quero (Id e endereço MAC). apenas abre a página php(que tem uma session para receber uma variável ID e uma variavel MAC). O código com sua sujestão ficou assim:

 

import projetofinaltiago.Id;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.net.*;
import java.io.*;
import java.awt.Desktop;
import java.net.URI; 

public class Main{

  public static void main(String[] args){

     Id id1 = new Id ();
     id1.mudaId ("7897hgf");
     id1.exibeDados ();
     //Desktop d = Desktop.getDesktop();


InetAddress ip;
try {

	ip = InetAddress.getLocalHost();
	//System.out.println("Current IP address : " + ip.getHostAddress());

	NetworkInterface network = NetworkInterface.getByInetAddress(ip);

	byte[] mac = network.getHardwareAddress();

	System.out.print("Endereço MAC: ");

	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < mac.length; i++) {
		sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));

	}
	System.out.println(sb.toString());

} catch (UnknownHostException e) {

	e.printStackTrace();

} catch (SocketException e){

	e.printStackTrace();

}
       try {
       Desktop.getDesktop().browse(new URI( "http://saude.administre.me/teste"));
       } catch (Exception ex) {
       ex.printStackTrace();
}
  }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionei duas linhas ao final do bloco try e mais um cathc. Dá uma olhada e veja se dá certo. Desse jeito, na página php você recupera os valores das variáveis via GET.

 

import projetofinaltiago.Id;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.net.*;
import java.io.*;
import java.awt.Desktop;
import java.net.URI; 

public class Main{

  public static void main(String[] args){

     Id id1 = new Id ();
     id1.mudaId ("7897hgf");
     id1.exibeDados ();
     //Desktop d = Desktop.getDesktop();


InetAddress ip;
try {

	ip = InetAddress.getLocalHost();
	//System.out.println("Current IP address : " + ip.getHostAddress());

	NetworkInterface network = NetworkInterface.getByInetAddress(ip);

	byte[] mac = network.getHardwareAddress();

	System.out.print("Endereço MAC: ");

	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < mac.length; i++) {
		sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));

	}
	System.out.println(sb.toString());

               String url = "http://saude.administre.me/teste?ip=" + ip.getHostAddress() + "&mac=" + sb.toString();
               Desktop.getDesktop().browse(new URI(url));

} catch (UnknownHostException e) {
	e.printStackTrace();
} catch (SocketException e){
	e.printStackTrace();
} catch (Exception e) {
               e.printStackTrace();
       }
  }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, funcionou super bem, mas acho que não resolveu o problema de segurança. Porque esses dados na verdade eu quero para autenticar uma máquina num login on line, comparando com um sistema php que agora não vem ao caso. MAS IMAGINE. se o usuario, com o metodo get, copiar o endereço do navegador, ele pode levar esse endereço com o valor das variáveis e autenticar de qualquer máquina. E dai vai por água a baixo, mesmo criptografando. entao...o ideal é ser pelo METODO POST.

 

Adicionei mais um protocolo de conexao via post, mas algo nao está funcionando bem. O que ficou errado será?

import java.net.*;
import java.awt.Desktop;
import java.net.URI;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class Main {

   public static void main(String[] args)throws Exception {

       String id="4g5f45g4f5";
       InetAddress ip;


  try {

           ip = InetAddress.getLocalHost();
           //System.out.println(" Endereço de IP : " + ip.getHostAddress());
           NetworkInterface network = NetworkInterface.getByInetAddress(ip);
           byte[] mac = network.getHardwareAddress();
           System.out.print("Endereço MAC: ");
           StringBuilder sb = new StringBuilder();
           for (int i = 0; i < mac.length; i++) {
               sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
           }
           System.out.println(sb.toString());
       }

  catch (UnknownHostException e) {}
  catch (SocketException e) {}

       /****************fim do processamento dos valores*****************************/
       /****************inicio da conexao e envio das variaveis**************************/
  try {


    String data = URLEncoder.encode("Numero Serial:", "UTF-8") + "=" + URLEncoder.encode(id, "UTF-8");
    data += "&" + URLEncoder.encode("Endereço Mac: ", "UTF-8") + "=" + URLEncoder.encode(sb.toString() , "UTF-8");

   //Desktop.getDesktop().browse(new URI("http://saude.administre.me/teste"));
   URL url = new URL("http://saude.administre.me/teste");
   URLConnection conn = url.openConnection();
   conn.setDoOutput(true);
   OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
   wr.write(data);
   wr.flush();

   BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
   String line;
   while ((line = rd.readLine()) != null) {
     System.out.println(line);
   }
   wr.close();
   rd.close();

      }
  catch (Exception ex) { }


   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
MAS IMAGINE. se o usuario, com o metodo get, copiar o endereço do navegador, ele pode levar esse endereço com o valor das variáveis e autenticar de qualquer máquina. E dai vai por água a baixo, mesmo criptografando. entao...o ideal é ser pelo METODO POST.

 

Só tenha em mente uma coisa. Você não tem essa segurança toda usando POST. Já existe até add-on do Firefox que permite que você não apenas veja o cabeçalho da requisição como também altere seus valores. Se o que vocês está fazendo envolve segurança e autenticação de usuários, acho melhor você rever seus conceitos e usar outra base ideológica de implementação.

 

...continuando,

 

Aqui tem um exemplo de como implementar leitura e escrita de uma URLConnection. Com isso você será capaz de enviar os dados via POST. Mas não se esqueça , é possível, e é simples abrir o cabeçalho e ver o que está sendo enviado. O ideal é que além de enviar os dados via POST, você também criptografe esses parâmetros. Bem, isso é o mínimo que você pode fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Implementei para enviar dados via POST, mas algo não está funcionando bem...o que será que é?

import java.net.*;
import java.awt.Desktop;
import java.net.URI;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class Main {

   public static void main(String[] args) throws Exception {

       String id = "4g5f45g4f5";
       System.out.println(id);
       InetAddress ip;


       try {

           ip = InetAddress.getLocalHost();
           //System.out.println(" Endereço de IP : " + ip.getHostAddress());
           NetworkInterface network = NetworkInterface.getByInetAddress(ip);
           byte[] mac = network.getHardwareAddress();
           System.out.print("");
           StringBuilder sb = new StringBuilder();
           for (int i = 0; i < mac.length; i++) {
               sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
           }
           System.out.println(sb.toString());


String urlParameters = "mac="+sb.toString()+"id=" + id;
String request = "http://saude.administre.me/teste";
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches (false);

DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
connection.disconnect();


           BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
           String line;
           while ((line = rd.readLine()) != null) {
               System.out.println(line);
           }



       } catch (UnknownHostException e) {
       } catch (SocketException e) {
       }

   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.