У меня есть следующий кодHttpURLConnection длина заголовка макс в Android
Update: Там проблема существует только в Android приложений, он прекрасно работает в приложении Java
Java (Не работает для большого значения заголовка)
URL url = new URL("MyUrl"); //<===This could even be http://www.google.com
HttpURLConnection request = (HttpURLConnection) url.openConnection();
String userCredentials = "username:AAAAABBBBBBBBCCCCSSSSSSSSSDDDDDDDDDDBE4B97CC9E81DB";
String basicAuth = "Basic " + android.util.Base64.encodeToString(
userCredentials.getBytes(), android.util.Base64.DEFAULT);
request.setRequestProperty ("Authorization", basicAuth);
request.connect();
InputStream stream = (InputStream) request.getContent();
Я получаю ClassNotFoundException, когда я называю getContent()
java.lang.ClassNotFoundException: Didn't find class "org.apache.harmony.awt.www.content.text.html__charset_us_ascii" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
в ClassLoader.class линии 514
protected Class<?> loadClass(String className, boolean resolve) throws ClassNotFoundException {
Class<?> clazz = findLoadedClass(className);
if (clazz == null) {
ClassNotFoundException suppressed = null;
try {
clazz = parent.loadClass(className, false);
} catch (ClassNotFoundException e) {
suppressed = e;
}
if (clazz == null) {
try {
clazz = findClass(className);
} catch (ClassNotFoundException e) {
e.addSuppressed(suppressed);
//className=org.apache.harmony.awt.www.content.text.html__charset_us_ascii
throw e; //<===The code crashes here
}
}
}
return clazz;
}
Проблема заключается размер заголовка Authorization, даже если это не то, что большая (88 символов)
Если изменить значение заголовка к чему-то меньшему оно работает.
Могу ли я как-то изменить максимальный размер заголовка?
Я пробовал его с других платформ (Windows, Windows Phone, Web), и он отлично работает, проблема не в моем сервере.
JQuery (работает всегда)
var usernameAndPasword=["username","AAAAABBBBBBBBCCCCSSSSSSSSSDDDDDDDDDDBE4B97CC9E81DB"].join(":");
var authorizationHeaderValue="Basic "+ window.btoa(usernameAndPasword);
$.ajax({
url : "http://...",
type: "GET",
beforeSend: function (request) { request.setRequestHeader("Authorization", authorizationHeaderValue); },
success: function(data, textStatus, jqXHR) { alert(data + "\n" + textStatus); },
error: function (jqXHR, textStatus, errorThrown){ alert(jqXHR.responseText + " \n " + textStatus + " \n"+errorThrown); }
});
C# (всегда работает)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUristring);
request.Method = "GET";
request.Headers["Accept-Encoding"] = "gzip, deflate";
var bytes = Encoding.UTF8.GetBytes("username" + ":" + "AAAAABBBBBBBBCCCCSSSSSSSSSDDDDDDDDDDBE4B97CC9E81DB");
var base64 = Convert.ToBase64String(bytes);
request.Headers["Authorization"] = "Basic " + base64;
HttpWebResponse webResponse = (HttpWebResponse)request.GetResponseAsync().Result;
Как вы знаете, в чем проблема? А где трассировка стека? – EJP
Какие еще платформы он работает? – chokdee
выглядит так http://stackoverflow.com/questions/11216078/error-reading-from-html-class – warlock