post daten übertragen / einloggen

Y05h1

Mitglied
Hallo!

Ich will ein Programm schreiben das sich auf einer Webseite einloggt.
Habe auch schon die Suchfunktion benutzt, aber ich bin leider immer nur auf code schnipsel oder sonstiges gestoßen, womit ich nichts anfangen kann...
Kann mir jemand ausführlich erklären wie sich so etwas machen lässt oder hat wer ein Tutorial?
Soll auch keine große sache sein. Nur das einlggen eben...

Y05h1
 
Um sowas tun zu können, solltest Du den Grobaufbau dieser Seite kennen.

1. Du erstellst eine URLConnection zu dieser Seite.

2. Du liest deren Inhalt.

3. Du separierst den Absende-URL aus dem Gesamttext.

4. Du rufst den Absende-URL mit z.B. Username und Passwort auf.

Beispiel:

HTML:
<form name="XYZ" method="POST" action="http://www.webnobis.com">
Name: <input type="text" name="user"><br>
Passwort: <input type="password" name="password">
</form>

Code:
//...
URLConnection con = (new URL("http://entwickler.webnobis.com")).openConnection();
con.setDoInput(true);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String s;
while (in.ready()) {
s = in.readLine();
if (...) { //Action-Parameter erkennen
	//URL extrahieren
	break;
}
else {
	s = null;
}
}
in.close();
 
//nun aufrufen:
HttpURLConnection httpCon = (HttpURLConnection)(new URL(myURL)).openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestMethod("POST");
PrintStream out = new PrintStream(con.getOutputStream());
out.print("user=mueller&password=mueller123");
out.close();
httpCon.setDoInput(true);
in = new BufferedReader(new InputStreamReader(httpCon.getInputStream()));
while (in.ready()) {
s = in.readLine();
//nun kannst Du "weiterwurschteln"
}
 
Zuletzt bearbeitet:
Danke für die Hilfe...
Hat mir sehr geholfen. Das eigentliche Problem ist zwar noch nicht wirklich beseitigt, da keine cookies gesetzt werden, aber das ist ja ein anderes Problem und es ist mir auch so eine große Hilfe.

DANKE!

Y05h1
 
Hallo,

was genau müsste ich tun, wenn mein php-Formular einen sogenannten Submut-Button unterhält und die Daten nicht über die URL weitergeleitet werden.
Alles auslesen ect klappt soweit nur das mit dem Submit-Button nicht.
 
Moin!
Wenn du auf den Button klickst, werden deine eingegeben Daten ( und möglicherweise auch ein paar versteckte und der Name oder der Wert des Buttons) an die Webseite geschickt.
Wenn du das Beispiel oben nimmst, reicht es vielleicht, einfach den Namen und Wert des Buttons an den String anzuhängen:
Code:
out.print("user=mueller&password=mueller123&name=buttonName&value=buttonValue");
Einfach mal im Quelltext nachschauen...
Kann auch sein, dass bei dir Cookies gesetzt werden.
Am einfachsten ist es sicherlich, mal ein Tool zu nutzen, welches den HTTP-Traffic auf deinem PC aufzeichnet (bspw.Ethereal ), so dass du genau weist, was passiert. Und das programmierst du einfach nach.

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Ethereal gibt es nicht mehr...es heißt jetzt wireshark.

Apache liefert mit Axis (und vielleicht auch anderen) ein kleines Java Tool mit, womit man Nachrichten durchschleifen kann. Der Pfad zur Klasse lautet org.apache.axis.utils.tcpmon (ja die Klasse ist wirklich kleingeschrieben)
 
Hallo,

erstmal Danke, für die schnelle und kompentente Hilfe.
Aber kann es nicht sein, das das Formular alles serverseitig abfertigt?
Beispiel bei einem login-Formular oder so.

Habe mir auch Ethereal runtergeladen, kann aber auch da nur den Aufruf der Seite erkennen, sonst nichts.

Habe das genannte Formular mal hochgeladen
http://frankylo.fr.funpic.de/formular.php

Da soll eigentlich nur das Formular mal abgeschickt werden, egal ob was bei Name eingetragen ist oder nicht.
Wenn man mit Firefox auf SENDEN klickt kommt eine Meldung "Hat geklappt" und mir wird gleichzeitig eine email zugeschickt.

Dies wollte ich nun mit php bewerkstelligen, mein Code sieht wie folgt aus.

Code:
public static void main( String args[] ) {
 
 
URL url = new URL("http://frankylo.fr.funpic.de/formular.php");
				try{
HttpURLConnection connection=(HttpURLConnection) url.openConnection();;
	
		connection.setDoInput(true);
	        connection.setDoOutput(true);
		connection.setUseCaches(false);
		connection.setRequestProperty( "User-Agent", "Mozilla" );
					connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
						// connection.setRequestProperty( "Authorization", "Test" );
					        connection.setRequestMethod("POST");
					  	connection.connect();
						
						 // Nun alles rausschicken
					    printout = new DataOutputStream (connection.getOutputStream ());
 
          printout("Name=test");
					   
					    printout.flush ();
					    printout.close ();
					    
					    	}
					    	    input.close ();
		   
						}
			catch( IOException e ){
							System.out.println(e);
						}}}


Das Formular wird so zumindest nicht abgeschickt.
Wo ist hier der Denkfehler?

Danke
 
Zuletzt bearbeitet:
Moin!
Natürlich wird php serverseitig abgefertig ( im gegensatz wie beispielsweise Java Script). In deinem Fall wird so wie du gesagt hast, wohl eine Email aufgrund der Formulardaten versendet. Das Formular muss natürlich an den Server geschickt werden, damit es verarbeitet werden kann.

Dieser String wird an den Server gesendet :
name=meinname&senden=true&abschicken=senden

Erkennt man zum einen aus dem Quelltext, zum anderen, wenn man Ethereal oder HTTPLoook nutzt, um den HTTP Verkehr zu sniffen.
Das heißt, Schnuffies beispiel ein wenig abgewandelt, und es klappt ohne probleme:
Code:
URL url = new URL("http://frankylo.fr.funpic.de/formular.php");
            HttpURLConnection httpCon = (HttpURLConnection)(url).openConnection();
            httpCon.setDoOutput(true);
            httpCon.setRequestMethod("POST");
            PrintStream out = new PrintStream(httpCon.getOutputStream());
            out.print("name=derNamezuSenden&senden=true&abschicken=senden");
            out.close();
              
            BufferedReader in = new BufferedReader(new InputStreamReader(httpCon.getInputStream()));
            while (in.ready()) {
                String s = in.readLine();
                
                   

            }
        }
            catch( Exception e ){
                e.printStackTrace();
      }}}

*grüssle*
MeinerEiner
 
Oje, vielen Dank.
Da sieht man den Wald vor lauter Bäume nicht. Hab mich so auf das inputfeld "submit" konzentriert, das nur noch das wichtig war.
Super schnelle Hilfe danke.

Wie man sieht, bin ich noch ein absoluter Anfänger was java.net angeht und sicher auch bei anderen Dingen.
Schlimm, wenn man an solchen Dingen scheitert.

Wollte mir ein Script schreiben, das sich in eine Community einloggt und dort einige Seiten durchscannt.

Die nächste Hürde wären die Cookies, diese
lese ich ja über
String cookie = con.getHeaderField("Set-Cookie");

Vielleicht könnt ihr mit noch einen kleinen tipp gebe, wie ich das mit mehreren Cookies manage, die ggf über JavaScript gesetzt werden.
Eine einfache Schleife mit einem cookie[] hätte zur Folge,d. immer derselbe wert gesetzt wird.


Mein jetziger Code wird später erst in mehrere Methoden gesplittet und sieht wie folgt aus:

public static void main( String[] args ) throws Exception
{

BufferedReader bin = null;
DataOutputStream printout;
DataInputStream input;
String Data ="login1=1&email=XXX&pass=XXX";
URL url = new URL("http://www.bestimmteSeite.de/login.php");
String cookie="";


HttpURLConnection httpCon = (HttpURLConnection)(url).openConnection();
httpCon.setRequestProperty("Cookie",cookie); // Vor InputStream bzw getHeader
httpCon.setDoOutput(true);
httpCon.setRequestMethod("POST");

//Daten ausgeben
PrintStream out = new PrintStream(httpCon.getOutputStream());
out.print(Data);
out.close();

cookie = httpCon.getHeaderField("Set-Cookie");
int index = cookie.indexOf(";");
if(index >= 0) cookie = cookie.substring(0, index);

BufferedReader in = new BufferedReader(new InputStreamReader(httpCon.getInputStream()));
while (in.ready()) {
String s = in.readLine();
System.out.println(s);
}
System.out.println(cookie);
}}
 
Zuletzt bearbeitet:
Zurück