2012-10-13 1 views
6

URLConnection을 사용할 때 301 리디렉션이 작동하지 않고 getHeaderFields()를 사용하여 Location 헤더를 표시하지 않습니다. 그것은 새로운 안드로이드 (나는 4.1을 테스트하고 그것을 작동)에서를 제외하고는 빈 목록입니다. 이것은 기본 브라우저 인 here에서도보고되었지만 내 테스트에서는 Android 브라우저에서 작동 한 것처럼 보입니다. 오래된 Android에서이 버그에 대한 해결 방법이 있습니까? 301/302 Android에서 작동하지 않는 리디렉션 (다른 버전에서 다르게 작동)

내가 시도 :

URLConnection conn = u.openConnection(); 
HttpURLConnection conn = (HttpURLConnection) u.openConnection(); 
(conn).setInstanceFollowRedirects(true); 

하지만 여전히 새로운 안드로이드를 제외하고, 빈 목록을 반환합니다.

업데이트 : 관련 문제 일 수 있으며 경우에 따라 URLConnection에서 요청을 보내지 않는 경우가 있습니다. (나는 에뮬레이터가있는 PC에서 Wireshark로 확인했다.) 이 버그를 해결할 방법이 있습니까?

업데이트 : 3xx 리디렉션 테스트를 시도했지만 정상적으로 작동했지만 리디렉션은 Ian의 쿠키 관리자에서 작동하지 않았습니다. 직접 대해서 openConnection 후 setCookies가 호출 확인한 후, 그것을 잘 작동합니다 :

 URL u = new URL(_url); 
     ... 
     int tries = 4; 
     int code = 301; 
     URLConnection conn = null; 
     while (tries > 0 && code/100 == 3) { 
      conn = null; 
      conn = u.openConnection(); 
      _CM.setCookies(conn); 
      ((HttpURLConnection)conn).setInstanceFollowRedirects(false);//Required 
      code =((HttpURLConnection)conn).getResponseCode(); 
      if (code/100 == 3) { 
       String loc = conn.getHeaderField("Location"); 
       u = new URL(loc); 
      } 
     } 

     //conn.addRequestProperty("Accept-Encoding", "gzip"); 

     conn.connect(); 
     _CM.storeCookies(conn); 

진짜로 이상한 것은 FollowRedirect 라인 ("필수"주석) 새로운 안드로이드 (4.1 에뮬레이터)에 대한 것입니다 필요가 없습니다. 구형 Android (2.2)에서는 Connection Reset by Peer 오류가 발생합니다. 이것이 리디렉션 실험 코드가 4.1이 아닌 2.2에서 실패한 이유 일 수 있습니다. 기능상의 차이점은 무엇입니까? comments here에 따르면 리디렉션 https는 JVM 버전에 따라 다른 동작을하는 것으로 보입니다. 안드로이드의 URLConnection/HTTPUrlConnection이 다른 버전에서도 변경되었을 수 있습니까?

+0

(아파치 코 몬즈 HttpClient를 바탕으로) HTTP 요청 때로는 서버에 도달하지 못한다. HTTP 응답 코드'conn.getResponseCode();'는 리다이렉트가 발생하지 않을 때 무엇인가? – yorkw

+0

getResponseCode() 메서드는 URLConnection 유형에 대해 정의되지 않았습니다. – NoBugs

+1

http 관련 문제를 처리 할 때'HttpURLConnection.getResponseCode(); '를 사용하면 더 많은 작업을 수행하기 전에 항상 실제 응답 코드를 확인합니다. – yorkw

답변

2
URLConnection의 확실

하지,하지만 난 HttpClient를가 리디렉션을 존중 것을 알고 우리 모두가 돌아 오는 길에 안드로이드

http://developer.android.com/reference/org/apache/http/client/HttpClient.html

2.1 사용은 당신이 말한

+0

UrlConnection의 한계로 인해 이전 문제에서이 문제를 사용했지만, 모든 것을 다시 작성하지는 않았다. – NoBugs

+0

https를 지원합니까? 쿠키? – NoBugs

+0

지원되지 않는 기능을 알지 못합니다.) – pawelzieba