2010-10-06 4 views
11

ich die mp3-Datei von URL herunterladen möchten: "http://upload13.music.qzone.soso.com/30671794.mp3", habe ich immer java.io.IOException erhalten: Der Server hat den HTTP-Antwortcode 403 für die URL zurückgegeben. Aber es ist in Ordnung, wenn Sie die URL mit dem Browser öffnen. Unten ist ein Teil meines Codes:java.io.IOException: Server zurückgegeben HTTP-Antwortcode: 403 für URL

BufferedInputStream bis = null; 
BufferedOutputStream bos = null; 
try { 
    URL url = new URL(link); 

    URLConnection urlConn = url.openConnection(); 
    urlConn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 

    String contentType = urlConn.getContentType(); 

    System.out.println("contentType:" + contentType); 

    InputStream is = urlConn.getInputStream(); 
    bis = new BufferedInputStream(is, 4 * 1024); 
    bos = new BufferedOutputStream(new FileOutputStream(
    fileName.toString()));​ 

Jeder könnte mir helfen? Danke im Voraus!

+0

möglich Duplikat [Warum ich einen 403-Fehler erhalten Sie, wenn ich versuche, eine URL öffnen] (http://stackoverflow.com/questions/16826345/why-do-i-get-a-403-error -when-ich-try-open-a-url) – Krease

Antwort

2

Wenn ich die URL mit meinem Browser zugreifen ich auch 403. Vielleicht haben Sie in auf der Website mit Ihrem Browser angemeldet sind?

Wenn das der Fall ist, müssen Sie die Cookies von Ihrem Browser kopieren und es entlang schicken, vielleicht sogar noch mehr tun, um Ihren Browser Unterschrift zu replizieren, wenn die Website keine zusätzlichen Kontrollen der Fall ist.

Sie können das Cookie gesetzt durch Zugabe:

urlConn.setRequestProperty("Cookie", "foo=bar"); 

Wo foo = bar ist der Schlüssel-Wert-Paar finden Sie, wenn Sie die Website des Cookies in Ihrem Browser lokalisieren.

19

Anstatt URLConnection in Java zu verwenden, wenn Sie HttpURLConnection verwenden, sollte es möglich sein, auf die angeforderte Webseite von Java zuzugreifen. Versuchen Sie, den folgenden Code:

HttpURLConnection httpcon = (HttpURLConnection) url.openConnection(); 
httpcon.addRequestProperty("User-Agent", "Mozilla/4.76"); 

Normale java urlConnection wird nicht akzeptiert werden, auf das Internet zuzugreifen. Um den Browser zugreifen es brauchen eine Suche durchzuführen, ohne theException HTTP response code : 403 for URL


EDIT (@Mordechai): Keine Notwendigkeit, das Casting zu tun, fügen Sie einfach den User-Agent.

+3

Umwandlung in 'HttpURLConnection' wird hier nichts ändern, das von' url.openConnection() 'zurückgegebene Objekt ist das gleiche, egal ob Sie es umwandeln oder nicht. – Thomas

+5

** Was? ** _ "Normales Java mit URL Verbindung wird nicht akzeptiert, um auf das Internet zuzugreifen" _ Das ist falsch und irreführend. Casting ändert nicht das zugrunde liegende Objekt und das OP legt bereits die User-Agent-Request-Eigenschaft fest ...Wie hat das so viele upvotes? – Krease

+2

Der Grund, warum es so viele upvotes hat, ist, weil es das Problem tatsächlich löst, wenn die URL-Verbindung die Anfrage-Eigenschaft nicht hinzufügt, und wie ich, Leute in Google suchen und das versuchen und es funktioniert, aber es würde auch funktionieren, wenn Sie nur setze 'URLConnection.addRequestProperty (" User-Agent "," Mozilla/4.76 ")' – centenond

4

Das Problem wird durch den Statuscode gegeben. 403 bedeutet eigentlich "Verboten" und impliziert Die Anfrage wurde aus einem Grund abgelehnt, den der Server dem Client nicht anzeigen möchte (oder nicht hat).

das Problem liegt auf der Serverseite.

0

Ich würde auch prüfen, ob der Server die Ressource waren befindet sich eine ACL oder eine ähnliche Stelle hat, wir haben nur ein aufgelöstes „java.io.IOException: 403“ -Ausgabe auf diese Weise.

kommt es vor, dass 403 Fehler sehr allgemein gehalten sind und man kann wirklich nicht sicher, ob die Quelle sein, wie es nur etwas sein kann.

12

Sie können auch

System.setProperty("http.agent", "Chrome"); 

es funktionierte für mich verwenden.

+1

Dies ist ein magischer Buddy. Es funktioniert – bademba

+0

Perfekt funktioniert ....! –

0

Ich habe das folgende hinzugefügt, es funktionierte für mich.

conn.addRequestProperty("User-Agent", "Mozilla/4.76"); 
+0

Bitte nicht "Danke" als Antwort hinzufügen. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [Fragen und Antworten abstimmen] (https://stackoverflow.com/help/privileges/vote-), die Sie hilfreich fanden. - [Aus Bewertung] (/ review/low-quality-posts/18039830) – mersocarlin