# HttpURLConnection ResponseCode 403



## Jedit (11. Mrz 2011)

Hi!

Ich bin gerade dabei ein Downloadprogramm zu schreiben. Grundsätzlich funktioniert der Downloa ja nur teilweise (für mich kein Muster erkennbar) erhalte ich den ResponseCode 403, der (soweit ich glaube zu wissen) für einen Fehler beim verbindungsaufbau steht.

Kann mir bitte jemand sagen wann genau dieser Code 403 auftritt und wie ich ihn am besten behandle? Wenn ich einen Link angebe startet der Download in geschätzten 80% normal. Nur manchmal eben nicht aber wenn ich kurz warte und es erneut mit der selben URL versuche, klappt es plötzlich wieder.

Daher dachte ich, dass ich das Problem mit einer Schleife lösen kann die 20 mal aufgerufen wird, der Thread nach jedem Durchgang 0.5 Sekunden wartet und dann die Verbindung neu herstellt und den ResponseCode erneut abfragt ... leider nein.

Tips? Links? Würd mich freuen.

lg


----------



## Murray (12. Mrz 2011)

403 ("FORBIDDEN") bedeutet, dass der Server der Meinung ist, der anfragende Client hätte nicht die notwendigen Rechte, um die angeforderte Ressource zu erhalten. Das kann diverse Ursachen haben; oft liegt es an einer falschen URL.
Ist es denn wirklich so, dass bei der gleichen URL manchmal der Fehler kommt und manchmal nicht? Das wäre sehr seltsam.
Was sind denn das für URLs?


----------



## Jedit (12. Mrz 2011)

Also die URLs lese ich mir vom Quellcode einer YouTube Seite aus. Das sind die Links die zu den Videos führen. Hinter jedem Video stehen mehrere URLs. In meinem Programm lege ich zuerst einen bevorzugten Videtyp fest (derzeit .flv). Alle gefundenen URLs überprüfe ich dann auf den Typ der dahinter steht. Sobald ein .flv gefunden wird, versuche ich eine Verbindung herzustellen (derzeit nur mit connection.connect()), wenn das fehlschlägt versucht er die nächste URL bis keine .flv URLS mehr zu Verfügung stehen.

Anschließend teste ich auf die gleiche Weise die .mp4 URLs durch (wenn noch kiene URL gefundne wurde). Sobald jedeoch ein URL gefunden wird bei der ich eine Verbindung aufbauen konnte, wird die Verbindung getrennt, mit dieser URL eine Download Objekt erzeugt und ein Thread mit diesem Objekt gestartet.

Meine Download Objekte beinhalten nur alle wichtigen Daten. Meinem Thread wird im Constructor ein Download Objekt übergeben und lädt die Datei runter.

So gesehen könnte es schon möglich sein, dass es unterschiedliche URLs sind. Wenn ich bei einem Durchlauf eine Verbindung zu einer .flv URL herstellen kann, dieser Verbindungsaufbau beim zweiten versuch allerdings fehlschlägt, versucht das Programm ja die nächste URL. Geht das gut ... sind bei 2 Versuchen 2 unterschiedliche URLs übergeben worden ... hatte ich gestern nicht bedacht.

Was wäre hier denn eine gute Lösung? Ich dachte daran einfach alle von der Seite ausgelesenen URLs an mein Download Objekt zu übergeben und den Thread selbst dann eine passende URL suchen zu lassen und diese eine URL dann meinem Download Objekt extra zu übergeben um den Download mit der gleichen Datei fortsetzen zu können falls er pausiert wird.

lg

Edit1: Ok ich hab einfach beim Prüfen der URLs bevor ich ein Download Objekt erzeuge auch noch den ResponseCode abgefragt und für die Erzeugung des Downloads nur eine URL mit ResponseCode != 403 verwendet. Kann es noch nicht zu 100% bestätigen, aber die ersten 16 Tests verliefen fehlerfrei. Wenn das der Fehler war ... dann wars eine Dummheit von mir und der Thread unnötig, sorry.


----------

