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!
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"));
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.
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.
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.
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.