[Gelöst] HTTP Post - Credentials setzen

R

Rotesmofa

Erfahrenes Mitglied
20
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:
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
 
  • Danke
Reaktionen: Rotesmofa
B-Tastic schrieb:
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


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
 
Rotesmofa schrieb:
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



.... 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:
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.
 
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
 
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
 
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
 
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
 
Für weitere Fragen bitte einen neuen Thread aufmachen.
 

Ähnliche Themen

A
Antworten
1
Aufrufe
636
swa00
swa00
L
Antworten
15
Aufrufe
907
jogimuc
J
R
  • RacingSystems
Antworten
12
Aufrufe
980
jogimuc
J
Zurück
Oben Unten