Подтвердить что ты не робот

Java.io.IOException: сервер вернул код ответа HTTP: 403 для URL

Я хочу загрузить mp3 файл с url: "http://upload13.music.qzone.soso.com/30671794.mp3", я всегда получал java.io.IOException: сервер возвращал код ответа HTTP: 403 для URL. Но это нормально, когда открывается 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()));​

Кто-нибудь может мне помочь? Спасибо заранее!

4b9b3361

Ответ 1

Вместо использования URLConnection в java, если вы используете HttpURLConnection, вы можете получить доступ к запрашиваемой веб-странице из java. Попробуйте следующий код:

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

Обычная java с использованием URLConnection не будет принята для доступа в Интернет. Чтобы получить доступ к браузеру, необходимо выполнить поиск без исключения HTTP response code : 403 for URL

Ответ 2

Вы также можете использовать

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

это сработало для меня.

Ответ 3

Проблема задается кодом состояния. 403 означает "Запрещено" и подразумевает, что запрос был отклонен по той причине, что сервер не хочет (или не имеет возможности) указывать клиенту.

проблема лежит на стороне сервера.

Ответ 4

Когда я обращаюсь к URL-адресу с моим браузером, я также получаю 403. Возможно, вы вошли на сайт с вашим браузером?

Если вам понадобится дублировать куки файл из вашего браузера и отправить его, возможно, даже сделать больше, чтобы реплицировать вашу подпись в браузере, если сайт выполняет дополнительные проверки.

Вы можете установить cookie, добавив:

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

Где foo = bar - пара ключ-значение, которую вы найдете при поиске файла cookie сайта в своем браузере.

Ответ 5

Я бы также проверить, находится ли сервер в ресурсе, есть ACL или аналогичный на месте, мы просто решили проблему "java.io.IOException: 403" таким образом.

Бывает, что 403 ошибки очень общие, и вы не можете быть уверены в источнике, поскольку это может быть что угодно.

Ответ 6

Я добавил следующее, это сработало для меня.

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