# Redirect, Login und Download bei Rapidshare.com



## 2nerd4u (18. Mai 2007)

Hallo erst mal,
ich bin neu in dem Forum und dies ist mein erster Beitrag. Wäre cool wenn mir jemand helfen kann.
Also mein Problem ist folgendes:

Ich möchte bei Rapidshare.com Daten runterladen, per Java Applikation.
Wie man URLs lädt weiß ich. Mein Problem ist jedoch, dass wenn ich die direkte DownloadURL (wie z.B.: "http://rapidshare.com/files/19017288/blur.part09.rar") angebe, er mir die Login-Seite lädt und sie als blur.part09.rar speichert.
Mit dem Debug Modus von wget hab ich auch gesehen wie ich eine das ganze Gestalten muss.

wget sendet folgenden http Request:

```
---request begin---
GET /files/19017288/blur.part09.rar HTTP/1.0                 //Wichtig!!
User-Agent: Wget/1.10.2
Accept: */*
Authorization: Basic XXXXXXXXXXXXXXXX
Host: rapidshare.com
Connection: Keep-Alive
---request end---
```

und erhält daraufhin folgendes zurück:


```
---response begin---
HTTP/1.1 302 Moved Temporarily                                   //Wichtig!!
P3P: CP="ALL DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR STP UNI NAV STA PRE"
Date: Fri, 18 May 2007 08:11:23 GMT
Connection: close
Accept-Ranges: bytes
Location: [url]http://rs125tl2.rapidshare.com/files/19017288/blur.part09.rar[/url]  //Wichtig!!
Content-Length: 0

---response end---
```

wie kann ich das mit Java realisieren? 

Ich habe dazu auch schon was gefunden:

```
public class HeaderRequest {
    public static void main (String[] args){
	try {
        // Create a URLConnection object for a URL
        URL url = new URL("http://rapidshare.com/");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // List all the response headers from the server.
        // Note: The first call to getHeaderFieldKey() will implicit send
        // the HTTP request to the server.
        for (int i=0; ; i++) {
            String headerName = conn.getHeaderFieldKey(i);
            String headerValue = conn.getHeaderField(i);
            System.out.println(headerName + ": " + headerValue);
            if (headerName == null && headerValue == null) {
                // No more headers
                break;
            }
            if (headerName == null) {
                // The header value contains the server's HTTP version
            }
        }
    } catch (Exception e) {
    } 
    }
}
```
Rapidshare.com sendet mir dann leider nur dies:

```
null: HTTP/1.1 200 OK
P3P: CP="ALL DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR STP UNI NAV STA PRE"
Date: Fri, 18 May 2007 08:21:37 GMT
Connection: close
Accept-Ranges: bytes
Content-Type: text/html; charset=ISO-8859-1
Cache-Control: no-cache
Content-Length: 4856
null: null
```

Wäre über jeden Tipp dankbar.
Wie erstllen ich so einen CustomHttpRequest?


Mit freundlichen Grüßen
2nerd4u :wink:


----------



## Murray (18. Mai 2007)

In deinem Code fehlt ja zumindest der Name der Datei, der bei WGET mit übertragen wird. Daher unterscheidet sich auch der Response: du bekommst nur die Homepage (und daher den Status OK).

Versuch mal

```
URL url = new URL("http://rapidshare.com/files/19017288/blur.part09.rar");
```


----------



## 2nerd4u (18. Mai 2007)

Das habe ich auch schon versucht... 
Hätte ich villeicht besser formulieren können.
Die Rückgabe vom Server sieht für die vollständige URL (http://rapidshare.com/files/19017288/blur.part09.rar) leider genauso aus...



```
null: HTTP/1.1 200 OK
P3P: CP="ALL DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR STP UNI NAV STA PRE"
Date: Fri, 18 May 2007 13:03:56 GMT
Connection: close
Accept-Ranges: bytes
Content-Type: text/html; charset=ISO-8859-1
Cache-Control: no-cache
Content-Length: 4855
null: null
```


----------



## Murray (18. Mai 2007)

Dann fällt ja noch auf, dass beim WGET ein Authentifizierungs-Header mitgeschickt wird. Dazu kannst du - nach dem openConnection, aber vor dem ersten getHeaderFieldKey - explizit einen entsprechenden Header setzen:

```
conn.setRequestProperty("Authorization", "Basic Mm5lcmQ0dTptYXJpdXM=");
```


----------



## 2nerd4u (21. Mai 2007)

Danke schon mal an alle!
Ich habs jetzt hinbekommen:

```
String userpass = username + ":" + password;
String base64 = "Basic " +
        new sun.misc.BASE64Encoder().encode( userpass.getBytes() );
URLConnection conn = url.openConnection();
conn.setDoInput( true );
conn.setRequestProperty( "Accept", "*/*");
conn.setRequestProperty( "Authorization", base64 );
conn.setRequestProperty( "Host", url.getHost());
conn.setRequestProperty( "Connection", "Keep-Alive");
conn.connect();
```


----------

