wake-up-neo.com

java.io.IOException: Der Server hat den HTTP-Antwortcode zurückgegeben: 403 für die URL

Ich möchte die MP3-Datei von der URL herunterladen: "http://upload13.music.qzone.soso.com/30671794.mp3", ich habe immer Java.io.IOException: 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:

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()));​

Kann mir jemand helfen? Danke im Voraus!

15
Adao

Sie können auch verwenden

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

es hat bei mir funktioniert.

//Aktualisieren

Erklärung

Weil HttpURLConnection die Eigenschaft "http.agent" liest, falls festgelegt. Sie können es hier lesen: https://www.innovation.ch/Java/HTTPClient/advanced_info.html

Oder Sie können es im Quellcode der HttpURLConnection-Klasse nachschlagen:

String agent = Java.security.AccessController.doPrivileged(new Sun.security.action.GetPropertyAction("http.agent"));

49
Montezuma

Wenn Sie URLConnection in Java verwenden, sollten Sie, wenn Sie HttpURLConnection verwenden, den Zugriff auf die angeforderte Webseite von Java aus tun. Versuchen Sie den folgenden Code: 

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

Normales Java mit urlConnection wird für den Zugriff auf das Internet nicht akzeptiert. Um auf den Browser zuzugreifen, muss eine Suche ohne die Ausnahme HTTP response code : 403 for URL durchgeführt werden.


EDIT (@Mordechai): Das Casting muss nicht durchgeführt werden. Fügen Sie einfach den Benutzeragenten hinzu.

24
Saratha

Das Problem wird durch den Statuscode angezeigt. 403 bedeutet eigentlich "verboten" und impliziert, dass die Anforderung aus einem Grund abgelehnt wurde, den der Server dem Client nicht anzeigen möchte (oder dies nicht tun soll).

das Problem liegt auf der Serverseite.

4
arthur

Wenn ich mit meinem Browser auf die URL zugreife, bekomme ich auch 403. Möglicherweise sind Sie mit Ihrem Browser auf der Website angemeldet.

Wenn dies der Fall ist, müssen Sie das Cookie von Ihrem Browser aus duplizieren und zusammen mit dem Browser versenden. Vielleicht müssen Sie sogar noch mehr tun, um die Signatur Ihres Browsers zu replizieren, wenn die Website zusätzliche Prüfungen durchführt.

Sie können den Cookie setzen, indem Sie Folgendes hinzufügen:

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

Dabei ist foo = bar das Schlüssel-Wert-Paar, das Sie finden, wenn Sie das Cookie der Site in Ihrem Browser finden.

2
Alexander Sagen

Ich würde auch überprüfen, ob der Server, an dem sich die Ressource befindet, eine ACL oder ähnliches enthält, wir haben soeben ein Problem mit "Java.io.IOException: 403" gelöst.

Es kommt vor, dass 403 Fehler sehr allgemein sind und Sie sich der Quelle nicht wirklich sicher sein können, da dies alles sein kann.

0
runlevel0