[英]HttpURLConnection header max length in Android
我有以下代碼
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();
調用getContent()時收到ClassNotFoundException
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;
}
問題是授權標頭的大小,即使不是那么大(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;
當您使用base64編碼時,編碼字符串的最大長度應為64,如果是MIME,則編碼字符串的最大長度應為76。
有關更多信息,請檢查此
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.