2015-05-12 2 views
1

У меня есть следующий код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; 
+0

Как вы знаете, в чем проблема? А где трассировка стека? – EJP

+0

Какие еще платформы он работает? – chokdee

+0

выглядит так http://stackoverflow.com/questions/11216078/error-reading-from-html-class – warlock

ответ

-3

, как используется кодирование base64 максимальную длину закодированной строки должно быть 64, и если MIME, тогда максимальная длина для кодированной строки должна быть 76.

Для получения дополнительной информации пожалуйста, проверьте this

+0

Спасибо за ответ! be> 64, Посмотрите цитату из «Левиафана» Томаса Гоббса по вашей ссылке –