Wypełnianie formularzy www metodą POST.

0

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.

0

Popatrz na biblioteki testowe www np. Selenium, Canoo Web Test. Będzie ci zdecydowanie łatwiej. Framework wykona za ciebie kod połączenia i wyśle dane, a stronę, którą otrzymasz można sobie wtedy pobrać za pomocą odpowiedniej metody API.

0

Zwróć uwagę, że w action masz ustawione http://krosno24.pl i to tam ma być wysłane zapytanie, a nie na ten adres, co podajesz w URL. Ten adres http://alos.za.pl/form2.html to tylko formularz, możesz go zapisać na lokalnym i i tak ci powinno zadziałać, bo adres docelowy jest w nim zapisany. Twój kod w javie w ogóle nie używa adresu krosno24.pl.

1 użytkowników online, w tym zalogowanych: 0, gości: 1