2010-10-06 12 views
11

Desidero scaricare il file mp3 dall'URL: "http://upload13.music.qzone.soso.com/30671794.mp3", ho sempre java.io.IOException: il server ha restituito il codice di risposta HTTP: 403 per l'URL. Ma va bene quando apri l'url usando il browser. Di seguito è parte del mio codice:java.io.IOException: il server ha restituito il codice di risposta HTTP: 403 per l'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()));​ 

Chiunque potrebbe aiutarmi? Grazie in anticipo!

+0

possibile duplicato del [Perché ricevo un errore 403 quando provo aprire un URL] (http://stackoverflow.com/questions/16826345/why-do-i-get-a-403-error -when-i-try-open-a-url) – Krease

risposta

2

Quando accedo all'URL con il mio browser ottengo anche 403. Forse hai effettuato l'accesso al sito con il tuo browser?

Se è il caso, è necessario duplicare il cookie dal browser e inviarlo, forse anche fare di più per replicare la firma del browser se il sito esegue controlli aggiuntivi.

È possibile impostare il cookie con l'aggiunta di:

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

dove foo = bar è la coppia chiave-valore troverete quando si individua cookie del sito nel proprio browser.

19

Invece di utilizzare URLConnection in java, se si utilizza HttpURLConnection è necessario effettuare l'accesso per accedere alla pagina Web richiesta da java. Provate il seguente codice:

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

java normale utilizzando urlConnection non sarà accettato per accedere a Internet. Per accedere al browser sarà necessario eseguire una ricerca senza theException HTTP response code : 403 for URL


EDIT (@Mordechai): Non c'è bisogno di fare il casting, basta aggiungere l'user agent.

+3

L'esecuzione di 'HttpURLConnection' non cambierà nulla qui, l'oggetto restituito da' url.openConnection() 'è lo stesso, sia che lo lanci o no. – Thomas

+5

** Cosa? ** _ "Normale java che utilizza urlConnection non sarà accettato per accedere a Internet" _ Questo è errato e fuorviante. La trasmissione non cambia l'oggetto sottostante e l'OP sta già impostando la proprietà della richiesta User-Agent ...In che modo questo ha così tanti upvotes? – Krease

+2

Il motivo per cui ha così tanti upvotes è perché in realtà risolve il problema se la connessione url non aggiunge la proprietà request, e come me, la gente cerca in google e prova questo e funziona, ma funzionerebbe anche se tu solo imposta 'URLConnection.addRequestProperty (" User-Agent "," Mozilla/4.76 ")' – centenond

4

Il problema è dato dal codice di stato. 403 significa in realtà "Proibito" e implica La richiesta è stata negata per un motivo che il server non vuole (o non ha mezzi per) indicare al client.

il problema si trova sul lato server.

0

Vorrei anche controllare se il server in cui si trova la risorsa ha un ACL o simile, abbiamo risolto il problema "java.io.IOException: 403" in questo modo.

Succede che gli errori 403 sono molto generici e non si può essere sicuri della fonte in quanto può essere qualsiasi cosa.

12

È inoltre possibile utilizzare

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

ha funzionato per me.

+1

Questo è un amico magico. Funziona perfettamente – bademba

+0

....! –

0

Ho aggiunto il seguente, ha funzionato per me.

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

Si prega di non aggiungere "grazie" come risposta. Una volta che hai [reputazione] sufficiente (https://stackoverflow.com/help/whats-reputation), sarai in grado di [votare domande e risposte] (https://stackoverflow.com/help/privileges/vote- in alto) che hai trovato utile. - [Dalla recensione] (/ recensione/post di bassa qualità/18039830) – mersocarlin

Problemi correlati