2012-10-13 18 views
6

Bir URLConnection kullanıldığında, 301 yönlendirmesi çalışmaz, getHeaderFields() kullanarak Location başlığını bile göstermez. Yeni Android hariç, boş bir liste (4.1 test ettim ve çalıştı). Bu, varsayılan tarayıcıda (here) bildirilen bir şey gibi görünüyor, ancak testimde Android tarayıcısında çalıştı. Eski Android'deki bu hata için bazı geçici çözüm var mı? 301/302 Yönlendirme Android'de çalışmıyor (farklı sürümlerde farklı çalışır)

Denedim:

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

ama hala yeni Android'de dışında, boş bir liste verir.

Güncelleştirme: İlgili bir sorun olabilir, bazen URLConnection bazı durumlarda bile istek göndermiyor gibi görünüyor. (Emülatörü ile bir bilgisayarda Wireshark ile kontrol ettim). Bu böceğin etrafında çalışmanın bir yolu var mı?

Güncelleme: Ben 3xx yönlendirme için test çalıştı, iyi çalıştı yönlendirmeleri, fakat normal bağlantılar Ian'ın Kurabiye Manager ile çalışmadı. doğrudan OpenConnection sonra setCookies çağrıldı emin olduktan sonra, bu büyük çalışır:

 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); 

gerçekten garip bir şey FollowRedirect hattı ("Gerekli" yorumunu yaptı) yeni Android (4.1 emülatörü) vardır gerekli değildir. Eski Android'de (2.2), Connection Reset by Peer hatasını veriyor. Bu muhtemelen benim yönlendirme deneysel kodun 4.1 değil, 2.2'de başarısız olmasının sebebiydi. İşlevlerdeki farklılıklar için herhangi bir sebep var mı? comments here'a göre yeniden yönlendirme https, JVM sürümüne bağlı olarak farklı davranışlara sahiptir, Android'in URLConnection/HTTPUrlConnection özelliği farklı sürümlerde de değişmiş olabilir mi?

+0

(apache commons HttpClient dayanarak) HTTP isteği bazen sunucuya ulaşmıyor, yeniden yönlendirme gerçekleşmediğinde HTTP yanıt kodu 'conn.getResponseCode(); – yorkw

+0

getResponseCode() yöntemi, URLConnection – NoBugs

+1

türünün tanımlanışıdır. HttpURLConnection.getResponseCode(); 'http ile ilgili sorunla uğraşırken, daha fazla bir şey yapmadan önce her zaman gerçek yanıt kodunu alır ve denetlerim. – yorkw

cevap

2
URLConnection hakkında emin

değil, ama ben HttpClient yönlendirmeleri onur olduğunu biliyoruz ve tüm yol geriye dönük Android

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

2,1 için kullanabilirsiniz demiştin

+0

cevabını bağışlayamıyorum, daha önce UrlConnection kısıtlaması nedeniyle daha önce kullandığım bir problemde onu tekrar yazmayı tercih edemedim. – NoBugs

+0

https'yi destekliyor mu? kurabiye? – NoBugs

+0

Neyin desteklemediğini bilmiyorum;) – pawelzieba

İlgili konular