Authorization mit Apache HttpClient 4.x

xrax

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgendes Problem.

Ich möchte auf einen Server zugreifen um von dort ein XML zu erhalten. Allerdings muss ich mich auf diesem authentifizieren.

Ich habe aber weder Name noch Passwort, sondern nur eine URL wie diese:

Code:
https://1234567:user@www.xy.de/cgi_bin/call.pl?nr=555&Knr=1234567&Anr=ABC123

Gebe ich diese bei FireFox ein erhalte ich die gewünschten Daten auf den Browser.
Beim IExplorer kommt ein Eingabefeld für Name und Passwort.

Das soll natürlich nicht über den Browser laufen sondern mit diesem Code:

Code:
import org.apache.http.client.*

public void sendCall(String url) throws Exception{
		
		StringBuffer stBuf=new StringBuffer();
			HttpClient httpclient = new DefaultHttpClient();			
			HttpPost httppost = new HttpPost(url);			
			HttpResponse response = httpclient.execute(httppost);
			HttpEntity resEntity = response.getEntity();
			BufferedReader in = new BufferedReader(new InputStreamReader(resEntity.getContent()));
			String line;
			while ((line = in.readLine()) != null) {
				stBuf.append(line);
			}	
		String resString=stBuf.toString();
		
		System.out.println(resString);
	}

Als result erhalte ich wie zu erwarten : ..... <html><head><title>401 Authorization Required</title>.........

Was muss ich nun machen damit die Authorisation klappt?
Im FireFox gehts ja.

Ich habe nur Bsp. für Apache HttpClient 3.x mit Name,Passwort gefunden und komme damit nicht zurecht.

Weis jemand Rat?

Besten Dank
xrax
 
Kann sein, dass du in Firefox Name und Passwort vorher gespeichert hast?
Vielleicht meldet sich der Firefox automatisch an.

Wir benutzen ebenfalls Apache HTTPClient und der Zugriff auf den Server erfolgt genau so, wie du es beschrieben hast, nur aus einem Applet. Um den Zugriff zu erlauben, wird dem Applet vorher die JSESSIONID übergeben. Diese wird bei jedem Server-Aufruf aus Applet mitgegeben:
Code:
httppost.setHeader("Cookie", "JSESSIONID=" + sessionId );
 
Wenn du Name und Passwort hättest, könntest du so was versuchen:
Code:
        httpclient.getCredentialsProvider().setCredentials(
            new AuthScope(hostName, port),
            new UsernamePasswordCredentials(userName, userPwd));
 
Habe jetzt mal schnell nachgelesen.
Es kann sein dass der FF die integrierte Authentifizierung nutzt um sich auf dem Server anzumelden.
Hier http://www.ms-news.net/f890/sharepoint-integrierte-authentifizierung-6512238.html hatte einer ein ähnliches Problem wie du.

Nun mein Problem:
Ich habe User für eine Site aufgenommen und berechtigt. Wenn diese User nun
mit dem IE auf die Seite wollen, poppt ein Anmeldefenster trotz integrierter
Authentifizierung auf, nach dreimaliger Angabe der Kontoinformation kommt
die Meldung "Zugriff verweigert". Wenn die gleiche Site mit Firefox
aufgerufen wird und die Anmeldeinfos eingegeben werden, funktioniert alles
perfekt.
Wenn ich die Standartauthentifizierung aktiviere, funktioniert es auch mit
dem IE.


Vielleicht hilft dir das weiter.
 
Hab jetzt die Parameter der URL durchgetested und mit Knr + 'user' komme ich rein. Allerdings weiterhin nur über den Browser.

Habs so gemacht wie von dir beschrieben:

Code:
  httpclient.getCredentialsProvider().setCredentials(
            new AuthScope("xy.de", 443),
            new UsernamePasswordCredentials("1234567", "user"));

Kein Erfolg :-( ....... 401 Authorization Required
 
Ist es ein natives Fenster oder ein HTML-Formular, wo du die Anmelde-Daten eingeben sollst?
Vielleicht mit org.apache.http.params.HttpParams rumspielen.
 
Zurück