Filedownload https + Login

Hallo liebe Experten,

mittels untenstehendem Code lade ich Textdateien von URL herunter. Diese Dateien sind nur nach Login erreichbar, klappt auch bisher. Nun aber habe ich eine URL (die ich nicht öffentlich nennen kann) wo es nicht klappt. Da wird statt der Datei die Seite im html-Format heruntergeladen

Hat jemand eine Idee was da das Problem sein könnte ? Also warum nicht die txt Datei sondern die html Seite heruntergeladen wird?

url = new URL(downloadLink);
    final HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    String encoding = Base64.getEncoder().encodeToString((loginName + ":" + loginPassword).getBytes());
    urlConn.setRequestProperty("Authorization", "Basic " + encoding);
    final InputStream is = new BufferedInputStream(urlConn.getInputStream());
    File filePath = new File("files/downloads/");
    if (filePath.exists() == false) {
	if (filePath.mkdirs()) {
	    filePath.setReadable(true);
	    filePath.setWritable(true);
	}
    }
    final OutputStream os = new BufferedOutputStream(new FileOutputStream(filePath+"/datei.txt"));
    byte[] chunk = new byte[1024];
    int chunkSize;
    while ((chunkSize = is.read(chunk)) != -1) {
	os.write(chunk, 0, chunkSize);
    }

Wenn das Login über Cookies läuft statt über SIDs im Link, fehlen beim downloadlink sicher die Daten (SID) aus dem zugehörigem Session-Cookie.
Ich würde die heruntergeladene Seite mal in einem Texteditor ansehen (NICHT DIREKT ÖFFNEN, DENN ES KÖNNTE EIN VIRUS SEIN!) und schauen, ob da zufällig ein Login verlangt wird.

JA n login wird verlangt. Den übergeb ich ja auch siehe oben. Wenn ich die Seite (uneingelogged) im browser aufrufe, werd ich zum Login geleitet. Wenn ich eingelogged bin und den Link öffne, lädt die Datei herunter.

Der Link sieht so aus: https://www.domain.de/infocenter_download.php?f1=artikel.txt

Edit:
Hab grad mal untersucht im Browser, es ist eine SID gesetzt und ein “cookie_test” mehr aber nicht

Edit2:
Wenn ich im Browser eingelooged bin und die SessionID im Code wie folgt angebe
String myCookie = “sid=50292051d0ef7d46198b4c6a2818285f”;
urlConn.setRequestProperty(“Cookie”, myCookie);

klappt der Download. Wenn ich ausgelogged bin nicht mehr, da die SID nicht mehr passt wahrscheinlich. Hmm wie nun weiter? Müsste mich mit dem Code einloggen und die SID herusbekommen um die dann beim Download wieder anzugeben. Nur wie macht man das?

Hab es jetzt mit JSoup hinbekommen mich einzuloggen und die SID zu bekommen. Nun muss ich die nur der URLConnection adden, aber geht mit folgendem Code nicht.

String myCookie = “sid=”+sid;
urlConn.setRequestProperty(“Cookie”, myCookie);

Jemand noch eine Idee wie ich der Url den Cookie mitgebe?

Wenn das geht, dann würde ich mir noch mal die Strings myCookie sowie sid ausgeben lassen.

Nicht dass myCookie = „sid=sid=123…“ ist.
Sonderzeichen scheinen ja in der sid nicht drin zu sein, weshalb ein URLEncoding ja nicht gebraucht zu werden scheint.

Eventuell am Ende ausloggen nicht vergessen. Dann kann der Server die Session verwerfen oder falls da noch was anderes beschränkt.

die sid stimmt also ist die rein die ID :confused:

In der Bibliothek HTTP-Components gibt es ein Modul HttpClient, welches dir die Verwaltung abnehmen kann und dabei auch alle Sonderfälle berücksichtigt.
Das offizielle Tutorial zum Umgang mit Coolies findest du hier:
http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/statemgmt.html#d5e499