ho finalmente potuto leggere e a quanto pare sembra proprio la strada giusta, ho anche preso il codice di sample alla fine della pagina, ho cambiato qualcosina per adattarlo alle mie esigenze ed ora sto provando a fare il login qui sul forum, ma non funziona, ecco il codice che sto usando
codice:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URLEncoder;
public class SocketPost {
public static void main (String args[]) throws Exception {
String host = "forum.html.it";
int port = 80;
String form_action = "member.php";
String username = "YOUR_USERNAME";
String password = "YOUR_PASSWORD";
boolean result = login(host, port, form_action, username, password);
if (result)
System.out.println("SUCCESS");
else System.out.println("FAIL");
}
private static boolean login (String host, int port, String form_action, String username, String password) throws Exception {
// Dati da inviare tramite POST
// Composizione tipica: username=TUOUSER&password=TUAPASSWORD
String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8") + "&" +
URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8");
// Creo il Socket per la connessione all'host
InetAddress addr = InetAddress.getByName(host);
Socket socket = new Socket(addr, port);
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
wr.write("POST " + form_action + " HTTP/1.0\r\n");
wr.write("Host: " + host + "\r\n");
wr.write("Content-Length: " + data.length() + "\r\n");
wr.write("\r\n");
// Invio i dati tramite POST
wr.write(data);
wr.flush();
// Leggo la risposta dall'host
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Solitamente, in caso di pagine di login,
// il codice di risposta per un login valido è 302
if (br.readLine().equals("HTTP/1.1 302 Found")) return true;
else return false;
}
}
Credo di aver capito che oltre che i dati dell'host, della action e utente e password bisogna poi sapere come è fatta la composizione dei dati inviati al server, bene... e io come faccio a saperlo?
Ci sono altri errori per cui potrebbe non funzionare?
Credo proprio sia la composizione che va male, se analizzo la rete quando provo a far andare il programma catturo un pacchetto che tra le altre cose dice:
codice:
Bad Request. Your browser sent a request that this server could not understand