我有一些典型的代码,它们使用httpurlconnection获取带有url的文件。
他们在android 1.x和2.x上运行良好,但在android 4.1上失败了!
我在网上搜索了一下,但没有找到类似的信息。
有人能帮忙调查这个问题吗?

private String mURLStr;
private HttpURLConnection mHttpConnection;

...

url = new URL(mURLStr);

...

mHttpConnection = (HttpURLConnection) url.openConnection();
mHttpConnection.setDoOutput(true);
mHttpConnection.setRequestMethod("GET");

...

InputStream is = mHttpConnection.getInputStream();

getinputstream方法引发异常:
08-01 15:56:48.856: W/System.err(13613): java.io.IOException: No authentication challenges found
08-01 15:56:48.856: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.getAuthorizationCredentials(HttpURLConnectionImpl.java:427)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:407)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:356)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
08-01 15:56:48.866: W/System.err(13613):      at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
...

最佳答案

我现在也面临同样的问题。在4.1 jelly bean上,我在httpurlconnection上调用getresponsecode()时收到一个ioexception“未找到身份验证挑战”。
我在网上搜索了一下android源代码中的变化,发现了以下内容:
4.0.4(工作):https://bitbucket.org/seandroid/libcore/src/7ecbe081ec95/luni/src/main/java/libcore/net/http/HttpURLConnectionImpl.java
4.1.1(不工作):https://bitbucket.org/seandroid/libcore/src/6b27266a2856/luni/src/main/java/libcore/net/http/HttpURLConnectionImpl.java
如4.1jb中所示,getAuthorizationCredentials()方法抛出ioException。如果响应代码是401或407,它将使用headerParser.parseChallenges(..)解析在响应中找到的质询头。如果返回的列表为空,则引发异常。
https://bitbucket.org/seandroid/libcore/src/6b27266a2856/luni/src/main/java/libcore/net/http/HeaderParser.java
我们目前正在调查究竟是什么原因导致该列表为空,但怀疑我们的服务器可能使用realm=…而不是挑战标题中的realm=“…”。缺少引号可能是导致此问题的原因。如果真是这样的话,如果我们能成功的话,我们必须进一步调查。

09-28 09:12