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

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

 Scott Biggs15 мая 2019 г., 04:38
@Krease Хотя это на самом деле не дубликат, ваша ссылка была решением, которое я искал. Спасибо!
 Krease28 авг. 2014 г., 19:03

Ответы на вопрос(5)

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

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

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

//Обновить

объяснение

Потому что HttpURLConnection читает свойство "http.agent", если установлено. Вы можете прочитать это здесь:https://www.innovation.ch/java/HTTPClient/advanced_info.html

Или вы можете посмотреть его в исходном коде класса HttpURLConnection:

String agent = java.security.AccessController.doPrivileged(new sun.security.action.GetPropertyAction("http.agent"));

 Erin06 мая 2018 г., 14:04
Спасибо, это должен быть принятый ответ! Работал на меня!
 KayV13 авг. 2019 г., 14:44
Это не просыпается для производственного сервера
 T.S27 мая 2018 г., 11:02
Ух ты, магия! Можете ли вы объяснить причину этого?
 Parth Solanki30 мар. 2018 г., 12:33
Спасибо, это помогает мне!
 bademba10 сент. 2016 г., 14:33
Это волшебный приятель. Оно работает
 Venkatesh G05 дек. 2017 г., 18:08
Отлично работает ....!

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ (@Mordechai): нет необходимости выполнять кастинг, просто добавьте пользовательский агент.

 Rafiq Ahmad19 июл. 2018 г., 07:16
@Saratha работает как шарм, спасибо
 Thomas16 июл. 2014 г., 11:47
Кастинг вHttpURLConnection здесь ничего не изменится, объект возвращаетсяurl.openConnection() то же самое, независимо от того, сыграли ли вы это или нет.
 Krease28 авг. 2014 г., 23:56
Какие? «Обычный java, использующий urlConnection, не будет принят для доступа в интернет»  Это неверно и вводит в заблуждение. Приведение не меняет того, что является базовым объектом, и OP уже устанавливает свойство запроса User-Agent ... Как это имеет так много голосов?
 alrts21 авг. 2018 г., 10:25
cftc.gov выдал эту ошибку (403) впервые вчера. Чтобы решить проблему, достаточно было просто добавить conn.addRequestProperty («Пользователь-агент», «Chrome»); где conn обозначает простое соединение URLC. Спасибо за помощь!
 centenond28 мар. 2017 г., 02:09
Причина, по которой у него так много голосов, заключается в том, что он действительно решает проблему, если в URL-соединении не добавляется свойство запроса, и, как и я, люди ищут в Google и пробуют это, и это работает, но это будет работать, даже если вы установитеURLConnection.addRequestProperty("User-Agent", "Mozilla/4.76")

Я бы также проверил, есть ли у сервера, на котором расположен ресурс, ACL или что-то подобное, мы просто решили проблему «java.io.IOException: 403» таким образом.

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

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

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

Ваш ответ на вопрос