Jak w temacie. Chciałbym za pomocą kodu Javy automatycznie łączyć się z serwerem www i wysyłać mu wypełniony formularz metodą post a potem odbierać stronę, na którą zostanę przekierowany po przesłaniu formularza.
Dużo googlowałem na ten temat, niestety nie byłem w stanie znaleźć działającego przykładu.
A to formularz, który staram się wypełnić ( formularz znajduje się na stronie http://alos.za.pl/form2.html ):
<form method="post" action="http://krosno24.pl">
Name: <input type="text" name="name">
email: <input type="text" name="email">
<input type="submit">
</form>
Kod jakiego używam znajduje się poniżej ( pomijam kontrolę wyjątków ):
// Tworzymy nowe połączenie
URL url = new URL("http://alos.za.pl/form2.html");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setFollowRedirects(true);
connection.setRequestMethod("POST");
// serwer akceptuje kodowanie UTF-8
String post = URLEncoder.encode("name=RJM&email=rjm_20%40o2.pl", "UTF-8");
// ustalamy różne parametry rządania
connection.setRequestProperty("User-Agent", "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-length", String.valueOf(post.length()));
// wysyłamy rządanie
os = connection.getOutputStream();
osw = new OutputStreamWriter(os);
osw.write(post);
osw.close();
// wypisujemy kod html pobranej strony
is = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String s = null;
while ((s = br.readLine()) != null) {
System.out.println(s);
}
Powyższy kod pobiera zawartość strony z formularzem (http://alos.za.pl/form2.html) a nie strony,
na którą powinienem zostać przekierowany, po wypełnieniu formularza (http://krosno24.pl), tak
jak ma to miejsce po wypełnieniu formularza w przeglądarce.
Z tego wniosek, że dane nie zostały przesłane przez POST.