# Webseite ausfüllen und abschicken



## Phönix[GAST] (12. Okt 2008)

Hi, wäre jemand so nett und hilft mir?
Ich möchte eine Webseite ausfüllen und dann quasi den Submit-Button drücken.
Sprich:
Seite aufrufen, <input>-Tags ausfüllen und dann den Submit-Button drücken.

Dazu habe ich mir ein paar Tutorials/Probleme durchgelesen, welche ich hier per Suchfunktion gefunden habe. Aber ich muss zugeben, ich verstehe sie kein Stück.

Könnte mir jemand anhand von diesem BEispiel Schritt für Schritt erklären, was zu tun ist.

<form name="meinForm01" id="meinForm" method="post" action="http://meinserver.de/test.php" enctype="multipart/form-data">
<input type="text" id="vorname" name="vorname01"/>
<input type="text" id="geburtstag" name="geburtstag01"/>
<input type="submit" id="fertig" name="fertig01"/>
</form>

Hoffnungsvoll schon im Voraus dankend,
Phönix


----------



## gex (12. Okt 2008)

Von wo aus willst du das Formular ausfüllen? Aus einem Java-Client?

Weshalb willst du sowas machen?  - Klingt mir nach Spamming von Formularen?!


----------



## Phönix[GAST] (12. Okt 2008)

Ja, ich möchte es mit einem kleinen Java-Programm machen.

Spamming liegt mir absolut fern. Ich hielt es einfach für eine leichte Art, korrekte Post-Strings zu erzeugen, da diese ja dank dem Submit-Button von der Webseite selbst erzeugt werden.
Ich habe bei manchen Seiten ernsthafte Schwierigkeiten, die JavaScript-Blöcke zu analysieren und auf diese Weise könnte ich mir das komplett sparen.


----------



## maki (12. Okt 2008)

HttpUnit, vielleicht auch Selenium.


----------



## cschaedl (12. Okt 2008)

hi,

hatte mich letztens mit dem selben Problem beschäftigt, vll. hilft dir die Klasse etwas:


```
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Request {
   private String action = "";
   private Map<String, String> parameters = new HashMap<String, String>();
   private Map<String, String> header = new HashMap<String, String>();

   /**
    * Setzt das action-Attribut
    * 
    * @param action
    */
   public void setAction(String action) {
      this.action = action;
   }

   /**
    * Setzt eine RequestParameter-Map
    * 
    * @param parameters
    */
   public void setParameters(Map<String, String> parameters) {
      this.parameters = parameters;
   }

   /**
    * Fügt ein Name/Value-Paar zur RequestParameter-Map hinzu.
    * 
    * @param name
    * @param value
    */
   public void addParameter(String name, String value) {
      this.parameters.put(name, value);
   }

   /**
    * Setzt einen Header.
    * 
    * @param header
    */
   public void setHeader(Map<String, String> header) {
      this.header = header;

   }

   /**
    * Gibt den Header zurück.
    * 
    * @return
    */
   public Map<String, String> getHeader() {
      return this.header;
   }

   /**
    * Konvertiert die Elemente der RequestParameter-Map in einen
    * ParameterString.
    * 
    * @return encodedParameters
    * @throws UnsupportedEncodingException
    */
   private String encodeParameters() throws UnsupportedEncodingException {
      Set<Map.Entry<String, String>> set = this.parameters.entrySet();
      Iterator<Map.Entry<String, String>> it = set.iterator();
      String encodedParameters = new String();

      while (it.hasNext()) {
         Map.Entry<String, String> current = it.next();
         encodedParameters += "&" + current.getKey() + "="
               + URLEncoder.encode(current.getValue(), "iso-8859-1");
      }
      return encodedParameters.substring(1);
   }

   /**
    * Führt einen Post-Request durch und fügt, falls gesetzt, einen Header
    * hinzu.
    * 
    * @return response
    * @throws MalformedURLException
    * @throws IOException
    */
   public InputStream request() throws MalformedURLException, IOException {
      URL url = new URL(this.action);
      URLConnection urlc = url.openConnection();
      for (String key : this.header.keySet()) {
         urlc.addRequestProperty(key, this.header.get(key));
      }
      String encodedParameters = encodeParameters();
      String length = String.valueOf(encodedParameters.length());

      urlc.setUseCaches(true);
      urlc.setDefaultUseCaches(true);
      urlc.setDoInput(true);
      urlc.setDoOutput(true);
      urlc.setRequestProperty("Content-Type",
            "application/x-www-form-urlencoded");
      urlc.setRequestProperty("Content-Length", length);

      OutputStream os = urlc.getOutputStream();
      OutputStreamWriter requestWriter = new OutputStreamWriter(os);
      requestWriter.write(encodedParameters);
      requestWriter.flush();
      requestWriter.close();

      URLConnection postMethodResponse = urlc;
      this.header = new HashMap<String, String>();
      Map<String, List<String>> responseHeader = postMethodResponse
            .getHeaderFields();
      for (String key : responseHeader.keySet()) {
         this.header.put(key, responseHeader.get(key).get(0));
      }

      return postMethodResponse.getInputStream();
   }
}
```

Für das Forumlar

```
<form name="meinForm01" id="meinForm" method="post" action="http://meinserver.de/test.php" enctype="multipart/form-data">
<input type="text" id="vorname" name="vorname01"/>
<input type="text" id="geburtstag" name="geburtstag01"/>
<input type="submit" id="fertig" name="fertig01"/>
</form>
```

wäre der Code:

```
Request request = new Request();
request.setAction("http://meinserver.de/test.php");
request.addParameter("vorname01", "(value)");
request.addParameter("geburtstag01", "(value)");
request.addParameter("fertig01", "");
InputStream is = request.request();
```

Für (value) natürlich die Werte setzen, die du in die jeweiligen Felder "eintragen" willst.

mfg
Christopher


----------



## Gast (30. Okt 2008)

ich versuche mit der Seite http://wwwmgs.bionet.nsc.ru/cgi-bin/mgs/fastprot/pdbsitescan.pl?stage=0 zu kommunizieren, dazu habe ich folgenden Parameter angegeben (unter verwendung der Request Klasse):

request.addParameter("UPLOAD_PDBFILE", "/tmp/bla.pdb");
request.addParameter("submit", "");

jedoch bekomme ich als antwort INVALID PARAMETER STAGE

woran könnte das liegen?


----------



## HoaX (31. Okt 2008)

daran dass Request nicht mit dateiuploads umgehen kann? nimm httpunit/htmlunit/... die kümmern sich sogar um javascript


----------

