Login auf passwortgeschützer Seite

  • Hey :-[ ,


    da ich noch ein ziemlicher Android Anfänger bin stehe ich mal wieder vor einem Problem. :-X


    Und zwar bastel ich gerade an einem Login auf einer Website. Ich wollte gerne, dass die APP sich automatisch auf dieser Seite einloggt. Ich habe jetzt mal ein wenig im Internet gesucht und auch was gefunden, nur es funktioniert noch nicht richtig.


    Zu der Seite: Ich muss mich via Post Methode dort einloggen.


    Ich habe es jetzt schonmal versucht nur bekomme ich immer: android.os.NetworkOnMainThreadException
    So jetzt habe ich gelesen, dass ich um den Fehler zu umgehen ein Asynctask benutzen muss. Nur weiß ich jetzt nicht genau, wie ich die beiden Sachen kombiniere :(


    Hier mal meine Post Methode:


    und hier mein Asynctask.


    Gruß
    Evoh O:-)

  • Als funktionierend bekannte Codeschnipsel von anderen Entwicklern kopieren ist prinzipiell ein guter Plan, weil effizient;
    nicht gut ist allerdings, den Code "unbesehen" zu übernehmen, also nicht zu versuchen, diesen zu verstehen :)


    Beim Überfliegen deiner Schnipsel fällt direkt folgendes auf:
    - die "webview" Zeilen haben im Task nichts verloren, auf UI Elemente darf nur der UI-Thread zugreifen
    - den "post" Code hast du wohl unvollständig kopiert, da du mit "response" nichts weiter anstellst


    Grundsätzlich zu korrigieren:
    - das webview Zeug gehört in onPostExecute()
    - aus dem "response" solltest du die Ergebnisseite (als String) extrahieren können; diesen String gibst du (statt der null) zurück, so das er im postExec als Parameter zur Verfügung steht, und dort übergibst du ihn an deinen WebView

  • Hey... erstmal danke für deine Antwort ^^


    also ich habe hoffentlich jetzt deinen Rat befolgt, wenn ich das so richtig verstanden habe :).



    Wie meinst du das mit dort übergibst du ihn an den Webview? :-X

  • Sieht doch schon viel besser aus :)


    Ich meinte das so, wie ich es geschrieben habe :P
    In deiner Zeile 42 sollte die Antwort des Servers auf deinen Request abgeliefert werden, wenn du alles richtig gemacht hast;
    im deiner Zeile 46 bekommst du eben diesen String wieder geliefert (in den UI Thread), und das willst du doch vermutlich anzeigen, statt"http://example.org"?
    Da der String kein URL ist, schau mal nach loadData() oder loadDataWithBaseURL() (beide aus dem Gedächtnis, kann also sein das die nur so ähnlich heißen), damit solltest du das gewünschte Ergebnis erhalten.

  • Meinst du ich soll die onPostExecute so anpassen?

    Java
    @Override
    		protected void onPostExecute(String result) {
    			WebView webView = (WebView) findViewById(R.id.webView);
    			webView.getSettings().setJavaScriptEnabled(true);
    			webView.loadData(result, "text/html", "utf-8");


    Wenn ja dann erscheint die Seite jetzt auch nur ohne Grafiken und die Felder sind auch leider nicht ausgefüllt.
    Wie mach ich das jetzt?


    Danke nochmal das du mir hilfst :)

  • Dachte ich mir schon, das es mit loadData() nur halb funktionieren würde (kommt halt auf die Seite an).


    Darum hatte ich dir ja auch gleich noch eine Alternative genannt:
    http://developer.android.com/reference/android/webkit/WebView.html#loadDataWithBaseURL(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
    (Offenbar darf ich hier keine anklickbaren Links einfügen, das Symbol in der Leiste ist disabled)
    Edit: oder doch? Nach dem ersten Speichern war der Link nicht klickbar, nach dem 2. dann doch...

  • Guten Morgen :)


    also mit loadDataWithBaseURL() funktioniert das Seite laden jetzt, nur sind die Felder, die eigentlich ausgefüllt sein sollten noch leer. Eigentlich sollte das doch jetzt so klappen oder nicht bzw. kann ich irgendwie testen, ob die Daten auch gesendet worden sind?

  • Wären die Daten nicht gesendet worden, dann würdest du die Seite gar nicht angezeigt bekommen, oder?


    Daher wäre meine erste Vermutung, das du nicht alle Daten übermittelt hast, die von der Originalseite übertragen werden.


    Das scheint mir auffällig:
    html: input type="text" name="id"
    aber:
    java: BasicNameValuePair("userid", "idexample")

  • Stimmt eigentlich würde ich dann ja kein response bekommen.


    Ups...hab den Falschen HTML-Code gepostet. Hier ist es Userid und userpass... also dadran kann es nicht liegen

  • Einen response würdest du in jedem Fall bekommen, bei falschen/leeren Daten dann halt sowas wie "Passwort falsch" o.ä.


    In deinem HTML Code steht noch ein 3. Wertepaar (submit=login), das würde bei manuellem Ausfüllen der form mit übertragen werden, von deinem Java Code aber nicht.
    Wäre einen Versuch wert, oder?


    Ansonsten könnte ich mir vorstellen, das der Betreiber der Webseite solche Auto-Logins nicht möchte und darum gewisse Hürden etabliert hat, um sowas zu erschweren/verhindern.
    Mit PHP kenne ich mich nicht aus, aber wenn der Login mein Auftrag gewesen wäre, dann wäre meine erste Recherche, ob man nicht herausfinden kann, ob der Request vom eigenen Server kam ;)

  • Java
    try {
    			    	List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
    			    	nameValuePairs.add(new BasicNameValuePair("userid", "test"));
    			    	nameValuePairs.add(new BasicNameValuePair("userpass", "test"));
                                    nameValuePairs.add(new BasicNameValuePair("submit", "submit"));  // was muss hier ins 2. Feld?
    			    	httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));


    Hey...also so wie es jetzt ist funktioniert es auch nicht. Bei dem 3. Wertepaar handelt es sich um einen Button, der normalerweise gedrückt wird. Muss ich da irgendwas besonderes beachten?


    Eigentlich sollte es möglich sein sich dort auf diese Art einzuloggen. ?(

  • Nochmal hinschauen:
    <input type="submit" name="submit" value="login"/>


    vs.


    BasicNameValuePair("submit", "submit")


    Zitat

    Eigentlich sollte es möglich sein sich dort auf diese Art einzuloggen.

    Das leitest du aus welchen Fakten her?
    "Weil ich das gerne möchte" gilt nicht als Antwort ;)

  • Okay :D


    ich hatte es zuerst mit Login, mein Fehler war, dass ich es nicht so wie in HTML klein geschrieben habe.


    Woher ich weiß das es gehen muss?
    Weil es jetzt dank deiner Hilfe geht :P
    Danke nochmal :love:


    wenn ich jetzt nach dem Login auf der Seite etwas machen will muss ich Cookies verwenden oder?

  • Zitat

    Woher ich weiß das es gehen muss?
    Weil es jetzt dank deiner Hilfe geht :P

    Das gilt nicht als Herleitung, aber schön das du es nun hinbekommen hast :)


    Zitat

    Danke nochmal :love:

    Gerne :)
    Ich bin ja noch neu hier, aber ist es in diesem Forum nicht vorgesehen, das man zum Bedanken den entsprechenden Button verwendet?
    Oder für was wird der verwendet?


    Ich helfe immer gerne, solange ich nicht den Eindruck gewinne, das mein Gegenüber sich mit der Materie gar nicht selber beschäftigen möchte, sondern einen fertigen Codeschnipsel von mir erwartet.

  • Zitat

    Ich würde ja gerne den Button benutzen nur hast du ihn glaube ich nicht aktiviert. Den musst du bei jeder antwort aktivieren glaube ich.(Bedankomat aktivieren.)

    Danke für den Tipp, wäre ich im Leben nicht drauf gekommen, das ich das selber machen muss... was könnte wohl der Sinn dieser Vorgehensweise sein?
    Ich habs jedenfalls beim letzten Beitrag (und sicherheitshalber bei diesem) mal gemacht, ist da jetzt jeweils ein Button zu sehen?


    Zitat

    wenn ich jetzt nach dem Login auf der Seite etwas machen will muss ich Cookies verwenden oder?

    Du meinst, damit bei weiteren Seitenwechseln die Login-Info erhalten bleibt bzw. zur nächsten Seite transportiert wird?
    Das wird vom Design der Seite abhängen.

  • Zitat

    Ja genau also immoment bin ich danach dann wieder ausgeloggt.

    Hm, das bedeutet dann wohl, das die Login-Seite bereits irgendwas speichert, wenn es die Startseite nicht tut?
    Mit dieser Thematik kenne ich mich zu wenig aus, da werde ich dir nicht wirklich helfen können, sorry.

    Zitat

    Ja die Buttons sind jetzt da.

    Ich verstehe zwar noch nicht, wozu das gut sein soll, aber schön das es soweit schon mal funktioniert hat :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!