Проблема с базовой аутентификацией доступа в загрузчике файлов
У меня возникают проблемы с загрузкой двоичного файла (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
Возможно, я немного опоздал, но я столкнулся с подобной проблемой.
Проблема заключается в следующей строке:
String encoding = Base64.encodeToString(authentication.getBytes(), 0);
Если вы измените эту строку так, чтобы она выглядела так:
String encoding = Base64.encodeToString(authentication.getBytes(), Base64.NO_WRAP);
По умолчанию Android Base64 util добавляет символ новой строки в конец закодированной строки. Это делает недействительными заголовки HTTP и вызывает "Плохой запрос".
Флаг Base64.NO_WRAP указывает утилите создавать закодированную строку без символа новой строки, тем самым сохраняя неповрежденные заголовки HTTP.