簡體   English   中英

HttpURLConnection標頭在Android中的最大長度

[英]HttpURLConnection header max length in Android

我有以下代碼

更新:僅在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();

調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM