2009-06-03 17 views
11

http istemci isteklerini çalıştırmak için bir sınıf oluşturduğum bir proje üzerinde çalışıyorum (sınıfım istemci olarak davranıyor). Bir URL'yi ve bir istek yöntemini (GET, POST, PUT, vb.) Alır ve URL'yi ayrıştırmak ve https veya http olup olmadığına bağlı olarak bir HttpsURLConnection veya HttpURLConnection açmak isteyebilirim (verilen URL'lerin her zaman olacağını varsay doğru).Java'da, URL'ye dayanarak HttpsURLConnection veya HttpURLConnection nasıl oluşturulur?

aşağıdaki yaparsanız:

otomatik hem http ve https kabul edebileceği bir URLConnection yaratacak, ama bunu yaparsam o zaman bir istek yöntemini ayarlamak için herhangi bir yol bulamıyorum Sonra
URLConnection conn = url.openConnection(); 

(GET, POST, vb), sadece HttpsURLConnection veya HttpURLConnection sınıfları setRequestMethod yöntemine sahip olduğundan.

aşağıdaki gibi bir şey yaparsanız: Sonra bağlantıları oluşturulur

if(is_https) 
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
else 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

ama eğer blokların dışında onlara ulaşamazlar.

Bunu yapmak mümkün mü, yoksa sadece apache httpclient sınıflarını bırakıp kullanmalı mıyım?

+5

Sadece * önce * bağl * tanımlarsanız * Beyan. Değişken kapsamını okumalısın. – user359996

cevap

28

HttpsURLConnection sen HttpsUrlConnection gerek kalmaz, sadece sen HttpsURLConnection olarak conn ilan edebilir HttpsURLConnection extends HttpURLConnection beri

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
+1

HTTPS'nin gittikçe daha fazla gerekli hale geldiği bir dönemde bu sorunla karşılaşırsınız. –

+0

Evet, bu Java polimorfizminden yararlanıyor. JVM, böyle bir bağlantıyı kullanırken uygun sınıftan yöntemi çağırır. Bu nedenle, eğer (is_https) bu durumda bir anlam ifade etmiyorsa, kontrol edin. https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html – kiedysktos

19

yapabilirsiniz HttpUrlConnection uzanır. Bu şekilde ortak arayüze (setRequestMethod()) erişebilirsiniz. uzatma yöntemlerine erişmek için

Peşinde bir döküm kullanmalıdır (çocuk sınıfta HttpsURLConnection sadece tanımlanmış getCipherSuite() gibi) bir instanceof:

if (conn instanceof HttpsURLConnection) { 
    HttpsURLConnection secured = (HttpsURLConnection) conn; 
    String cipher = secured.getCipherSuite(); 
} 
İlgili konular