java - Android 4.3 HTTPUrlConnection + Basic Auth - 未发现身份验证挑战

标签 java android httpurlconnection basic-authentication android-4.3-jelly-bean

我在 HttpURLConnection 上使用基本身份验证来获取一些数据。在 4.2 之前,它工作得很好,但是在 Nexus 4 上使用 4.3,我在查询响应代码时得到了 java.io.IOException: No authentication challenges found。奇怪的是,当我在 4.3 模拟器上运行相同的代码时,问题没有出现。

我尝试了这里提到的解决方案,但没有成功:HTTP Basic Authentication issue on Android Jelly Bean 4.1 using HttpURLConnection

代码:

URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(2000000); 

String userpass = user + ":" + pass;
String basicAuth;

//fix from SO
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
    basicAuth = "Basic " + new String(Base64.encodeToString(userpass.getBytes(), Base64.NO_WRAP));
}
else {
 //Base64: http://iharder.net/base64
    basicAuth = "Basic " + new String(com.foo.bar.Base64.encodeBytes(userpass.getBytes()));
}
urlConnection.setRequestProperty ("Authorization", basicAuth);

//throws Exception
urlConnection.getResponseCode();

跟踪:

09-01 21:40:13.501: W/System.err(23055): java.io.IOException: No authentication challenges found
09-01 21:40:13.501: W/System.err(23055):    at libcore.net.http.HttpURLConnectionImpl.getAuthorizationCredentials(HttpURLConnectionImpl.java:438)
09-01 21:40:13.501: W/System.err(23055):    at libcore.net.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:418)
09-01 21:40:13.501: W/System.err(23055):    at libcore.net.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:367)
09-01 21:40:13.501: W/System.err(23055):    at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:301)
09-01 21:40:13.501: W/System.err(23055):    at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497)
09-01 21:40:13.501: W/System.err(23055):    at com.foo.bar.InputStreamHelper.getUrlConnectionFromUrl(InputStreamHelper.java:65)

最佳答案

通过将构建目标提高到 API 级别 18 解决了这个问题

关于java - Android 4.3 HTTPUrlConnection + Basic Auth - 未发现身份验证挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18570180/

相关文章:

java - HttpURLConnection.getRequestProperties() 抛出 IllegalStateException : "Already connected"

java - 如何将 HttpUrlConnection 的逻辑拆分为多个方法?

Java HttpURLConnection | POST 方法 | HTTP header 字段的顺序

java - 包名称为 'com.google.android.gms.license' 的多个库

java - 如何在数组列表中找到元素?

android - XMPP、WebSocket 等问题

安卓:未知主机异常

java - Java 中的随机数生成

java - Jooq 保存或更新方法返回错误

android - 键盘不会在使用 PhoneGap 的 Android 应用程序上平移