java.io.IOException: сервер вернул код ответа HTTP: 403 для URL - PullRequest
18 голосов
/ 06 октября 2010

Я хочу скачать 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()));​

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

Ответы [ 5 ]

46 голосов
/ 15 марта 2016

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

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

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

// Update

Объяснение

Поскольку 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"));

24 голосов
/ 05 марта 2011

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

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

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


EDIT (@Mordechai): нет необходимости выполнять кастинг, просто добавьте пользовательский агент.

4 голосов
/ 23 июля 2011

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

проблема заключается на стороне сервера.

2 голосов
/ 06 октября 2010

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

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

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

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

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

0 голосов
/ 24 апреля 2014

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

...