程序在PC上运行,抛出ProtocolException:太多重定向:Android上的21

时间:2016-06-28 13:35:11

标签: java android httpurlconnection okhttp

我已经在SO(here的其中一个)上发现了一些关于此问题的问题,但是我无法弄清楚为什么在Android上运行代码时会引发异常而不是在使用JRE时引发异常在我的电脑上(Windows)。我使用完全相同的代码和库。

这是抛出异常的代码(某些变量在此范围之前声明):

URL url = new URL(urlString);
conn = (HttpsURLConnection) url.openConnection();

conn.setRequestMethod("GET");
conn.setUseCaches(false);
conn.setRequestProperty("User-Agent", userAgent);
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
if (cookies != null) {
    for (String cookie : this.cookies) {
        conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
    }
}
int responseCode = conn.getResponseCode();
Log.d(TAG, "Response code: " + responseCode);

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();

while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();

setCookies(conn.getHeaderFields().get("Set-Cookie"));

return response.toString();

conn.getResponseCode上抛出异常(如果删除,它也会在conn.getInputStream上抛出)。这是堆栈跟踪:

28939-28998/com.example.www W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:454)
28939-28998/com.example.www W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:348)
28939-28998/com.example.www W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:520)
28939-28998/com.example.www W/System.err:     at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
28939-28998/com.example.www W/System.err:     at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:25)

由于我没有将请求发送到我的服务器而是模拟浏览器,因此无法对服务器代码进行更改。

知道为什么这会在Android上发生,而它在我的电脑上运行顺畅吗?我正在考虑为HTTP请求尝试一个不同的库(也许是Basic HTTP Client),但我担心这会产生相同结果的枯燥工作。我还考虑过增加重定向限制,但这似乎是一个糟糕的解决方法。

提前致谢!

0 个答案:

没有答案