[JAVA] html-Form füllen und abschicken

AleX

Erfahrenes Mitglied
hi,
schreib grad ne Anwendung und wollte nun auf einer page bei der man Angebote per Webinterface einstellen kann dies insofern automatisieren, dass die page aufgerufen wird, die Anwendung einen gefakten cookie erstellt und dann eine html-form ausfüllt und diese abschickt. Die htmlform per POST.

Das mit dem Login bzw. Cookie funktioniert schon eiwandfrei, jetzt hab ich aber das problem, das Formular auszufüllen.

Hinweis: Es handelt sich nicht um nen php teil, wo man die parameter aus der form einfach in der url mitgeben könnte. :rolleyes:

Nun hab ich es wie gefolgt versucht:
Code:
                String toSend = "feld1=testinhalt";
                URLConnection uc = url.openConnection();
                uc.setUseCaches(false);
                uc.setDoInput(true);
                uc.setDoOutput(true);
                uc.setAllowUserInteraction(true);
                uc.setRequestProperty("Cookie", );

                DataOutputStream dostream = new DataOutputStream(uc.getOutputStream());
                dostream.writeBytes(toSend);
                dostream.flush();
                dostream.close();
Was aber nicht funktioniert und beim auslesen der page bekomme ich denn nen 403 - No Permission to access...

Wie kann man soetwas überhaupt machen? Nehmen wir an, ich will nur auf diese art und weise etwas in google eintragen und mir dann zeile für zeile die antwortpage einlesen....

Schon mal im Vorraus danke
alex
 

AleX

Erfahrenes Mitglied
@Thomas:

Also erst mal danke. Hat weitergeholfen.

Nun meine Frage, da ich ein weiteres Problem habe:

Das perlscript, das das Angebot einstellt befindet sich auf dem server in einem ungefähr
folgenden Pfad /ordner/SessionID+irgendwas/ordner/action.pl

Nun baue ich eine urlconnection zu dem eingabeformular auf, lese dort den htmlcode
aus, suche die Zeile mit <Form und lese da unter action dann die url mit der SessionID aus.

Das heißt wenn ich jetzt das perlding mit der sessionid aufrufe, die daten vom Formular an den Server schicke, müsste alles funktionieren.

Nur hab ich jetzt das problem, dass ich um das *.pl aufzurufen und die daten zu
schicken ne neue urlconnection aufbauen muss. Und bei der stimmt die
SessionID ja schon wieder nicht mehr.
Kann man von der alten urlconnection irgendwie auf ne andere url springen.
Ohne ne komplett neue Verbindung aufzubauen und somit ne neue SessionID zu
bekommen?

alex
 

Thomas Darimont

Erfahrenes Mitglied
Servus!

....puhhhhh....?

Kannst du dir nicht die SessionID von deiner ersten HttpConnection merken und
dann das an den Parameter des Konstruktors der neuen HttpUrlConnection übergeben?

Sowas wie ...

Code:
 HttpURLConnection con1 = new HttpURLConnection(www.irgendeinhost.de/ordner/action.pl);
 //Merke session
 String meineSession = magischeMethode_getSession ( www.irgendeinhost.de//ordner/SessionID+MeineSession/ordner/action.pl); //
 doParsing();
 //
 HttpURLConnection con1 = new HttpURLConnection(www.irgendeinhost.de/ordner/SessionID+irgendwas/ordner/action.pl);
 
 ...

Vielleicht kannst du ja mit der übergabe der alten SessionID eine bestimmte Session "erzwingen" ...

Gruß Tom ...
 

AleX

Erfahrenes Mitglied
ne, das geht leider nicht. Allerdings bin ich mir nicht sicher, ob vielleicht auch wasan meinem code falsch ist... :-/

Code:
import util.ProxyTunnel;

import java.net.URL;
import java.net.URLConnection;
import java.net.MalformedURLException;
import java.net.HttpURLConnection;
import java.io.*;


public class MobileMain {
    public static void main(String[] args) {
        new MobileMain();
    }

    public MobileMain() {
        ProxyTunnel.setProxy("proxy.xxx.de", "xxxx", "user", "pass");
        test("user", "pass");
    }


    public void test(String user, String pass) {
        boolean error = true;
        String tempUrl = "";
        try {
            URL url = new URL("http://" + user + ":" + pass + "@admin.mobile.de/cgi-bin/insertClosed.pl?" +
                    "titel=verkauf&funktion=Insert&bereich=pkw&HA=1");

            while (error) {
                try {
                    System.out.println("connecting: " + url);

                    URLConnection uc = url.openConnection();

                    BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                    String inputLine;

                    while ((inputLine = in.readLine()) != null) {
                        if (inputLine.startsWith("<FORM enctype=")) {
                            System.out.println("orgLine: " + inputLine);
                            tempUrl = inputLine.substring(inputLine.indexOf
                                    ("http://admin.mobile.de/"), inputLine.indexOf("\" name="));

                            System.out.println("action:  " + tempUrl);
                            }
                    }


                    error = false;
                } catch (Exception e) {
                    error = true;
                    System.out.println(e);
                }//catch
            }//while
            url = new URL(tempUrl);
            URLConnection uc = url.openConnection();
            uc.setUseCaches(false);
            uc.setDoInput(true);
            uc.setDoOutput(true);
            uc.setAllowUserInteraction(true);


            DataOutputStream dostream = new DataOutputStream(uc.getOutputStream());
            dostream.writeBytes("id=&ad_contentType=Car&_form=insert&ad_model=testteil03&ad_make=15900&ad_category=14&ad_price=48000");
            dostream.flush();
            dostream.close();

            BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
            String inputLine;

            while ((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
            }                    

        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
}

Hoffe du nimmst dir die zeit den code kurz mal zu überfliegen.
Weis, dass ich da viel verlange, aber weis jetzt echt nicht weiter.

DAnke im Vorraus
alex
 

Thomas Darimont

Erfahrenes Mitglied
Servus!

...

kannst du mir vielleicht mal noch schnell erklären, weshalb du unbedingt 2 Mal eine URLConneciton aufbauen mußt ?

...

bzw. versuch doch mal einen forward auf die Action-Url zu machen ...

d..h du bleibst mit der sleben URLConnection erstmal 10 sec auf seite 1 .. machst deine Aufgaben und leitest dann automatisch auf die action Seite weiter und bleibst in der selben session ...

Gruß Tom
 

AleX

Erfahrenes Mitglied
hi, geht hier ja ratz fatz mit den antworten :)

Das mit dem Forward hört sich richtig gut an.
Nur eine dumme Frage, wie mach ich das.