Проблема с базовой аутентификацией доступа в загрузчике файлов - PullRequest
11 голосов
/ 09 сентября 2010

У меня проблемы с загрузкой двоичного файла (zip-файла) в моем приложении из интернета. Я должен использовать обычную аутентификацию доступа для авторизации доступа к файлу, но ответ сервера всегда HTTP / 1.0 400 Плохой запрос.

String authentication = this._login+":"+this._pass;
String encoding = Base64.encodeToString(authentication.getBytes(), 0);            

String fileName = "data.zip";
URL url = new URL("http://10.0.2.2/androidapp/data.zip"); 

HttpURLConnection ucon = (HttpURLConnection) url.openConnection();

ucon.setRequestMethod("GET");
ucon.setDoOutput(true);

ucon.setRequestProperty ("Authorization", "Basic " + encoding);
ucon.connect();

/*
 * Define InputStreams to read from the URLConnection.
 */
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);

/*
 * Read bytes to the Buffer until there is nothing more to read(-1).
 */
ByteArrayBuffer bab = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
    bab.append((byte) current);
}

bis.close();

/* Convert the Bytes read to a String. */
FileOutputStream fos = this._context.openFileOutput(fileName, this._context.MODE_WORLD_READABLE);
fos.write(bab.toByteArray());
fos.close();

Может ли это быть вызвано пробелами в пароле?

1 Ответ

30 голосов
/ 01 июля 2011

Я мог бы немного опоздать, но я только столкнулся с подобной проблемой.Проблема заключается в следующей строке:

String encoding = Base64.encodeToString(authentication.getBytes(), 0);

Если вы измените эту строку так, она должна работать:

String encoding = Base64.encodeToString(authentication.getBytes(), Base64.NO_WRAP);

По умолчанию утилита Android Base64 добавляет символ новой строки вконец закодированной строки.Это делает недействительными заголовки HTTP и вызывает «неправильный запрос».

Флаг Base64.NO_WRAP указывает утилите создать закодированную строку без символа новой строки, таким образом сохраняя заголовки HTTP без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...