0

Я хочу загрузить файл с его URL-адресом. Я использую AsyncTask с HttpURLConnection, но когда я получаю код ответа, ошибка возврата сервера 403. Я использую HttpURLConnection в doInBackground.HttpURLConnection: Сервер возвращает HTTP 403 Запрещено

Код:

@Override 
protected String doInBackground(String... sUrl) { 
    InputStream input = null; 
    OutputStream output = null; 
    HttpURLConnection connection = null; 
    try { 

     ext = FilenameUtils.getExtension(sUrl[0]); 
     fileName = FilenameUtils.getBaseName(sUrl[0]); 

     Log.i("Brieg", "storage : /storage/emulated/0/" + fileName + "." + ext); 

     URL url = new URL(sUrl[0]); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.connect(); 

     if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { 
      return "Server returned HTTP " + connection.getResponseCode() + " " + connection.getResponseMessage(); 
     } 

     int fileLength = connection.getContentLength(); 

     input = connection.getInputStream(); 
     output = new FileOutputStream("/storage/emulated/0/" + fileName + "." + ext); 

     byte data[] = new byte[4096]; 
     long total = 0; 
     int count; 
     while ((count = input.read(data)) != -1) { 

      if (isCancelled()) { 
       input.close(); 
       return null; 
      } 
      total += count; 

      if (fileLength > 0) 
       publishProgress((int) (total * 100/fileLength)); 
      output.write(data, 0, count); 
     } 
    } 
    catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      if (output != null) 
       output.close(); 
      if (input != null) 
       input.close(); 
     } 
     catch (IOException ignored) { 
     } 

     if (connection != null) 
      connection.disconnect(); 
    } 
    return null; 

} 

Где проблема?

Зная, что когда я получаю URL-адрес в браузере, загружается файл загрузки.

Заранее спасибо.

+0

'Surl [0]' Пожалуйста, покажите, как ваш URL выглядит. – greenapps

+0

'output = new FileOutputStream ("/storage/emulated/0/"+ fileName +". "+ Ext);'. Это не хорошо, используя жестко закодированные пути. Он не будет работать на многих устройствах. Что это за сервер? Где он находится (LAN/Интернет)? – greenapps

+0

Я знаю, я просто использую это для тестирования, но приложение останавливается раньше. Url выглядит так: http://www.mywebsite.com/myfile.epub – MichelRobico

ответ

0

HTTP 403 Forbidden Где это проблема

Код ошибки говорит, что это ясно - вы запретили доступ к ресурсу на сервере. Возможно, сначала вам нужно пройти аутентификацию, возможно, вас просто запретили. Много возможностей.

+0

Когда я получаю URL-адрес в браузере, загружается файл загрузки. – MichelRobico

+0

Возможно, вам захочется выяснить, что именно отправляет ваш браузер - может быть файл cookie, референт, оба или что-либо еще, что сервер ожидает увидеть, а когда вы его не отправляете, вас отклоняют. –

0

Причиной должно быть, вы не устанавливать User-Agent:

con.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:221.0) Gecko/20100101 Firefox/31.0"); 
Смежные вопросы