[Gelöst] HTTP Post - Credentials setzen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Rotesmofa, 25.10.2010.

  1. Rotesmofa, 25.10.2010 #1
    Rotesmofa

    Rotesmofa Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    279
    Erhaltene Danke:
    20
    Registriert seit:
    08.08.2010
    Hallo Jungs,
    ich bin momentan mal wieder an einer Sache hängengeblieben:

    Ich möchte mit folgendem Code auf eine Useraktion eine Website ansprechen.
    Die Website verlangt einen Username und Password (Credentials)
    diese werden im Format user:password gesendet(habe ich mit wireshark mitgeschnitten).

    Jetzt möchte ich diese Credentials setzen und dazu einen Button auf der Seite ansprechen. Mein Problem ist das setzen der Credentials, ich habe das noch nicht kapiert.

    Ich möchte das Paket org.apache.http nutzen, dort gibt es "credentials" und "UsernamePasswordCredentials" was muss den gesetzt werden? Müsste nicht auch das ganze auf den Basic Mode gesetzt werden?

    Ich kann einen Post mit meinen Daten senden, das funktioniert Prima.
    Gruß
    Rotesmofa


    Das ist mein vorgehen:

    httpclient.getCredentialsProvider().setCredentials(
    new AuthScope("192.168.2.74"),
    new UsernamePasswordCredentials("admin", "1234"));
    HttpResponse response = httpclient.execute(httppost);

    an der Stelle getCredentialsProvider gibt mir Eclipse den Fehler das getCredentialsProvider für den Typ httpclient nicht definiert sei.
    Was muss man den nutzen?
     
    Zuletzt bearbeitet: 25.10.2010
  2. B-Tastic, 25.10.2010 #2
    B-Tastic

    B-Tastic Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    1
    Registriert seit:
    14.08.2010
    Phone:
    HTC Wildfire
    Code:
    DefaultHttpClient httpclient = new DefaultHttpClient();
    
    HttpProtocolParams.setUseExpectContinue(httpclient.getParams(), false);
    
    httpclient.getCredentialsProvider().setCredentials(
    new AuthScope("192.168.2.74", 80, null, "Digest"), 
    new UsernamePasswordCredentials("admin", "1234"));
    	    
    HttpPost httppost = new HttpPost("192.168.2.74");
    Hab es so selber auf An Android tutorial to get you started - Wiki gefunden, und abgeändert sollte also funzen.

    Ich denke mal du hast deinen httpclienten von einem anderen Typen deklariert?

    grüße
     
    Rotesmofa bedankt sich.
  3. Rotesmofa, 26.10.2010 #3
    Rotesmofa

    Rotesmofa Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    279
    Erhaltene Danke:
    20
    Registriert seit:
    08.08.2010

    Hallo nochmal,
    der Code compiliert nun (hatte wirklich einen anderen Typen deklariert :lol:)

    allerdings werden die Credentials in meiner Botschaft nicht gesendet, nur die NameValuepairs die ich nach dem Code einfüge! :thumbdn:

    Wenn ich mit Wireshark mitschneide erscheint also nicht admin:1234 als Nachricht bei jedem Post wie es beim normalen Webserverbutton gesendet wird.

    Gruß
    Rotesmofa
     
  4. Rotesmofa, 26.10.2010 #4
    Rotesmofa

    Rotesmofa Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    279
    Erhaltene Danke:
    20
    Registriert seit:
    08.08.2010


    .... und warum ist das so?
    Weil ichs nicht kapiert habe :lol: ich muss das ganze als GET anfragen nicht als Post ich editiere hier wieder wenn es funktioniert :biggrin:


    Edit: SOLVED

    Was war das Problem? Die AuthScope Parameter haben nicht gepasst, ich habe diese nun nocheinmal geändert nun werden die Parameter für die Verbindung gesetzt, wenn auch erst nach einem 401 beim ersten GET.

    Das ganze sieht so aus:

    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet("http://192.168.2.74/");
    httpclient.getCredentialsProvider().setCredentials(
    new AuthScope(null,-1),
    new UsernamePasswordCredentials("admin","1234"));
    HttpResponse response = httpclient.execute(httpget);
     
    Zuletzt bearbeitet: 26.10.2010
  5. thom_tegis, 06.03.2011 #5
    thom_tegis

    thom_tegis Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Hallo Forum-Mitglieder,

    a) ich bin Anfänger in Android
    b) aus lauter Verzweifelung suche ich nun Hilfe
    c) ich habe schon ungefähr 1 Mio Einträge gelesen wie einfach es sein soll sich mit Android auf eine Webseite anzumelden, tausende Beispiele, die schon laufen sollen und ich habe es nicht geschafft.

    Ich möchte einen URL über einen Port aufrufen. Dazu muss ichmich vorher authorisieren mit Benutzer und Passwort. Die Anmeldungsart ist Basic, der Webserver ein IIS.
    Nach tausenden Beispielen habe ich folgenden Code "entwickelt":

    .............
    DefaultHttpClient httpclient = new DefaultHttpClient();

    //authentication
    httpclient.getCredentialsProvider().setCredentials(
    // any host, any port
    new AuthScope(null, -1),
    //new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
    new UsernamePasswordCredentials(username, password));

    HttpGet method = null;
    try {
    method = new HttpGet(new URI(url));
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    HttpResponse response = httpclient.execute(method);
    ................

    Aber beim response-Aufruf habe ich folgenden StackTrace:
    WARN/System.err(766): java.net.SocketException: Permission denied

    Ich weiss nicht warum !
    Für jede Art der Hilfe wäre ich sehr dankbar.

    Viele Grüße
    Thom

    P.S. Permission für Internet im Manifest ist gesetzt.
     
  6. Rotesmofa, 06.03.2011 #6
    Rotesmofa

    Rotesmofa Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    279
    Erhaltene Danke:
    20
    Registriert seit:
    08.08.2010
    Na dann geb ich dir mal nen Tipp :winki:

    Der Code sieht ja nicht schlecht aus, aber mache doch mal folgendes:

    installiere Wireshark Go deep.
    dann schaue dir die Kommunikation eines normalen Browser o.ä. mit dem Server an. Du kannst den kompletten zyklus ansehen, dann vergleiche dies mit der Kommunikation deiner App!

    Das hat mir sehr geholfen.

    Gruß
    Rotesmofa
     
  7. thom_tegis, 07.03.2011 #7
    thom_tegis

    thom_tegis Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Hallo RotesMofa,

    vielen Dank erstmal für den Hinweis.
    ich werde es erstmal in die Richtung versuchen und vielleicht finde ich unterschiede (leider bin ich nebenbei auch kein Netzwerk-Spezialist).
    Ich hoffe, wenn ich dann nicht weiterkomme, dass ich dich evtl. nochmals anschreiben darf.
    Der Code sieht für mich auch nicht schlecht aus. Das ist das, was mich in den Wahnsinn getrieben hat. Auf tausend Foren war zu lesen, dass dies klappt. Und ich habe es nicht hinbekommen. Arrggghhh !!!!
    Ich werde mal entsprechend einen Vergleich anstellen.
    Vielen dank für deine Antwort.

    Viele Grüße
    Thom
     
  8. thom_tegis, 19.03.2011 #8
    thom_tegis

    thom_tegis Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Hallo liebe ForumLeser,

    ich habe es wohl doch geschafft und möchte euch auch noch mittteilen wie.

    ..................
    // set authentication
    Authenticator.setDefault(new Authenticator(){
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(username,password.toCharArray());
    }});

    HttpURLConnection c = null;
    c = (HttpURLConnection) new URL(url).openConnection();
    c.setUseCaches(false);
    c.connect();
    ..................

    Wäre natürlich noch interessant wie man sich mit den verschiedenen Authentifizierungsarten (Basic, digest, NTLM) anmelden könnte.
    Obwohl ich für NTLM oft gelesen habe, dass dies von Android nicht unterstützt wird.
    Anregungen und Lösungen sind herzlichst willkommen.

    mfg
    thom_tegis
     
  9. thom_tegis, 31.03.2011 #9
    thom_tegis

    thom_tegis Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Hallo liebe ForumLeser,

    hat jemand schon Erfahrung wie man sich in Android mit verschiedenen Authentifizierungsarten einloggen kann ?
    Ich habe zwar schon verschiedenes proboert, aber leider bekomme ich dann eine Fehlermeldung "not authorized".
    Jede Anregung ist willkommen.

    Vielen Dank.
    Thomas
     
  10. garak, 31.03.2011 #10
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,794
    Registriert seit:
    12.12.2009
    Für weitere Fragen bitte einen neuen Thread aufmachen.
     

Diese Seite empfehlen