【发布时间】:2012-08-04 17:09:03
【问题描述】:
我有一些典型的代码,它们使用 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)
...
【问题讨论】:
-
在我删除'mHttpConnection.setDoOutput(true)'行后它工作了!似乎这个问题与数百万其他问题的原因相同:如果 setDoOutput(true),Android 4.x 会将 http GET 转换为 POST! For your information: http://webdiary.com/tag/java-net-httpurlconnection/
-
我确实有同样的问题,但我不使用
setDoOutput()。在 Android 4.0 Ice Cream Sandwich (ICS) 上一切正常,但在 Android 4.1 Jelly Bean (JB) 上就坏了。顺便说一句,setDoOutput()将请求转换为 POST 请求是完全有道理的,因为 GET 请求的正文中不应包含有效负载。
标签: android authentication httpurlconnection