HTTP HTTPClient Authentication - Quickr Server

Mentos05

Mitglied
Hallo zusammen,
ich arbeite zurzeit an einem Tool, welches Dateien auf einen Quickr-Server updaten soll.
Dafür muss ich mich logischerweise beim Uploadvorgang authentifizieren, was ich mithilfe von Apaches httpclient machen wollte. (HttpClient - HttpClient Home)

Allerdings bekomme ich immer den Fehler:
Jul 11, 2012 2:15:50 PM org.apache.commons.httpclient.HttpMethodDirector processWWWAuthChallenge
INFO: No credentials available for BASIC '/LotusQuickr/123'@xxxxxxx.xxxx.de.xxx.com:80

Mein Code schaut wie folgt aus:
Java:
public void loadUpdate() throws HttpException, IOException{
	
		HttpClient client = new HttpClient();
		
		client.getState().setCredentials(
		new AuthScope("xxxxxxx.xxxx.de.xxx.com", 80, "realm"),
		new UsernamePasswordCredentials("username", "password")
		);
		
PostMethod post = new PostMethod("http://xxxxxxx.xxxx.de.xxx.com/dm/atom/library/_P123_RMain.nsf/view");
		
		post.setDoAuthentication(true);
		
		int status = client.executeMethod( post );
        System.out.println(status + "\n" + post.getResponseBodyAsString());
		
	}

Weiß jemand, wo der Fehler liegt?
Laut der Fehlermeldung fehlen ja angeblich Credentials... aber die habe ich ja bei setCredentials angegeben eigentlich. ???:L

Mit freundlichen Grüßen
Mentos05
 
Gibst Du auch den richtigen Realm an (dritter Parameter des Konstruktors von AuthScope)? In Deinem Fall vermutlich "/LotusQuickr/123" (oder AuthScope.ANY_REALM).
 
"realm" sollte den Authentisierungsbereich angeben.

Nach der Fehlermeldung zu urteilen muesste die wohl eher "LotusQuickr" oder "LotusQuickr/123" lauten.
 
Ich habe es jetzt mit "LotusQuickr", "LotusQuickr/123" und AuthScope.ANY_REALM probiert und bekomme weiterhin die gleiche Fehlermeldung...

Der generelle Codeaufbau ist aber richtig, oder?

Noch eine Frage, gibt es sonst eine andere Möglichkeit (opensource!) Multipart Requests mit Files zu versenden?
 
Habe mal versucht, was über quickr rauszukriegen. Scheint ja irgendwas von Lotus zu sein, das man über einen Websphere-Server aufrufen kann. Wie dat aussieht, hab ich leider nicht gefunden. Darum Fragerunde:
  • Verwendet Quickr überhaupt HTTP-Auth? Nicht vielleicht doch ein Login-Formular?
  • Wenn ja, verwendet Quickr wirklich Basic-Auth?
 
Der HttpClient sucht Credentials für folgenden AuthScope:
Scheme: BASIC
Realm: '/LotusQuickr/123'
Host: xxxxxxx.xxxx.de.xxx.com
Port: 80

So gesehen sieht eigentlich alles ok aus. Man koennte noch probieren den Scheme noch zusaetzlich auf BASIC zu setzen, ist aber bloss eine zusaetzliche Einschraenkung und sollte nichts mit dem Problem zu tun haben.


Versuch's mal mit AuthScope.ANY, der müsste für alle passen.

Java:
client.getState().setCredentials(
        AuthScope.ANY,
        new UsernamePasswordCredentials("username", "password")
        );

Ansonsten solltest du mal die Methode
Code:
HttpMethodDirector.processWWWAuthChallenge(final HttpMethod method)
durch debuggen..
 
Ich glaube der Realm ist
Code:
/LotusQuickr/123
. Mit führendem '/'!! Dann müsste es meiner Meinung nach gehen...
 
Ja Quickr verwendet einen http-Login.
Ich hatte zu Anfang mal mit HttpURLConnection gearbeitet und dabei kam folgendes heraus:

Java:
public String Login() {

		String userpassword = "username"
				+ ":"
				+ "password";
		
		String encodedCredentials = Base64.encodeBase64String(userpassword
				.getBytes());

HttpURLConnection connection;

connection = (HttpURLConnection) new URL(
				"http://xxxxxxx.xxxx.de.xxx.com/dm/atom/library/_P123_RMain.nsf/view)
		.openConnection();

	}
connection.setRequestProperty("Authorization",
				"Basic " + encodedCredentials);
}

Das hatte nämlich funktioniert, kann ich aber nicht brauchen, da ich Multipart Requests verschicken muss...
Ist ja ein http-Login mit Basic Auth.

Habe als Realm jetzt auch alles durchprobiert... Ich fürchte ich muss mir irgendwas anderes suchen, um das zu realisieren.
 
Mit dem HttpClient müsste es schon funktionieren.

Hast du's mal mit AuthScope.ANY probiert?
Am besten mal durchdebuggen und sehen warum er die Credentials nicht finden will.
 

Zurück
Oben