Je souhaite télécharger le fichier mp3 à partir de l'URL: "http://upload13.music.qzone.soso.com/30671794.mp3", j'ai toujours eu Java.io.IOException: le serveur a renvoyé le code de réponse HTTP: 403 pour l'URL. Mais c'est ok quand ouvrir l'URL en utilisant le navigateur. Ci-dessous une partie de mon code:
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()));
Quelqu'un pourrait m'aider? Merci d'avance!
Au lieu d'utiliser URLConnection
en Java, si vous utilisez HttpURLConnection
, vous devriez pouvoir accéder à la page Web demandée à partir de Java. Essayez le code suivant:
HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
httpcon.addRequestProperty("User-Agent", "Mozilla/4.76");
Un Java normal utilisant urlConnection
ne sera pas accepté pour accéder à Internet. Pour accéder au navigateur, il devra effectuer une recherche sans l’exception HTTP response code : 403 for URL
EDIT (@Mordechai): Pas besoin de faire le casting, ajoutez simplement l'agent utilisateur.
Le problème est donné par le code d'état. 403 signifie en fait "Interdit" et implique La demande a été refusée pour une raison que le serveur ne veut pas (ou n'a aucun moyen de) indiquer au client.
le problème se situe côté serveur.
Lorsque j'accède à l'URL avec mon navigateur, je reçois également le code 403. Vous êtes peut-être connecté au site avec votre navigateur?
Si c'est le cas, vous devez dupliquer le cookie à partir de votre navigateur et l'envoyer, peut-être même en faire plus pour répliquer la signature de votre navigateur si le site effectue des vérifications supplémentaires.
Vous pouvez définir le cookie en ajoutant:
urlConn.setRequestProperty("Cookie", "foo=bar");
Où foo = bar est la paire clé-valeur que vous trouverez lorsque vous localisez le cookie du site dans votre navigateur.
Je voudrais également vérifier si le serveur où la ressource est localisée a une ACL ou similaire en place, nous venons de résoudre un problème de "Java.io.IOException: 403" de cette façon.
Il se trouve que les erreurs 403 sont très génériques et vous ne pouvez pas vraiment être sûr de la source car cela peut être n'importe quoi.