Java'da verilen alan adı http veya https nasıl kontrol edilir?

Sorunum

Benim android uygulamasında, kullanıcıdan "www.google.com" gibi bir URL girişi alıyorum.

Verilen URL’yi http veya https kullanıp kullanmayacağımı öğrenmek istiyorum.

Ne denedim

after referring to some Stack Overflow questions I tried with getScheme()

try {
    String url_name="www.google.com";
    URI MyUri = new URI(url_name);
    String http_or_https="";
    http_or_https=MyUri.getScheme();
    url_name=http_or_https+"://"+urlname;
    Log.d("URLNAME",url_name);
}
catch (Exception e) {
    e.printStackTrace();
}

Ama yukarıdaki kodum bir istisna atar.

Sorumum

yaklaşımı getScheme() değerinin üstünde mi değil mi?

Yukarıdaki yaklaşım yanlış ise, URL http veya https nasıl bulunur?

14
temel olarak, https kullanıldığından https değil, http olarak varsayılmanız gerektiğini düşünüyorum. Bu sunucudan certitifcates'e ihtiyacınız olabilir.
katma yazar KOTIOS, kaynak
"url http veya https nasıl bulunur?" - bu bir URL değil. Bu bir alan adıdır. Bir alan adı bir şema içermiyor.
katma yazar CommonsWare, kaynak
Bunu neden yapmak istiyorsun? Http veya https açıkça belirtilmemişse, sizin için bir şey yoktur. Bir url, bunlardan biri için doğal bir tercihe sahiptir. Yalnızca URL'den günler istemek için iki farklı yol belirtiyorlar.
katma yazar Xaver Kapeller, kaynak
@ranjith Bunun için http veya https seçimi nasıldır? Kullanıcı tarafından belirtilen URL'yi kullanmak istiyorsanız, URL'yi tam olarak girilen şekilde kullanın. Aksi halde, iletişimi şifrelemek isterseniz, her zaman https kullanmanız gerekir. Sorunuz hiç mantıklı değil.
katma yazar Xaver Kapeller, kaynak
@XaverKapeller Kullanıcı girişi olduğunda tüm verileri yüklerim. İki istekte bulunursam daha fazla zaman alır.
katma yazar Ranjith Kumar, kaynak
@zjs HttpPost kullanıyorum .. Şema ile URL'ye ihtiyacınız var ..
katma yazar Ranjith Kumar, kaynak
SSL için kullanılmayan sunucu için 443 numaralı bağlantı noktasını kontrol edin.
katma yazar sampopes, kaynak
@ranjith: URL'den içerik almak için hangi kütüphaneyi kullanıyorsunuz? Bunun için dokümanları kontrol etmeyi denediniz mi, yoksa otomatik olarak bunu sizin için anlamayı destekleyip desteklemediğini görmek için URL'yi bir şema olmadan (ör. "//Google.com") iletmeye çalıştınız mı? Diğerleri de belirttiği gibi, bunu yalnızca kullanıcı girdisinden çıkaramazsınız; Hizmetle gerçekten iletişim kurmanız gerekiyor.
katma yazar zjs, kaynak

7 cevap

Alan adı bir alan adıdır, protokol ile ilgisi yoktur. Etki alanı WHERE, protokol NASIL.

Alan, gitmek istediğiniz konumdur, protokol nasıl gidilir, otobüsle, uçakla, trenle ya da tekneyle. 'Mağazaya gitmek istiyorum, trene veya arabaya gitmem gerekirse mağazaya nasıl sorabilirim?' Sormak hiç mantıklı değil.

Bunun tarayıcılarda çalışmasının nedeni, tarayıcının genellikle hiçbir protokol sağlanmamışsa hem http hem de https kullanarak bağlanmaya çalışmasıdır.

URL'yi biliyorsanız, bunu yapın:

    public void decideProtocol(URL url) throws IOException {
            if ("https".equals(url.getProtocol())) { 
               //It is https
            } else if ("http".equals(url.getProtocol())) {
               //It is http
            }
    }
4
katma
teşekkürler ... etki alanı vs protokolü hakkında net açıklama ... Anlıyorum soruyu anlamıştım ..
katma yazar Ranjith Kumar, kaynak

URLUtils 'i kullanarak, verilen URL'nin http veya https olduğunu kontrol edebilirsiniz.

URLUtil.isHttpUrl(String url); returns True if the url is an http.

URLUtil.isHttpsUrl(String url); returns True if the url is an https.

4
katma

Apache UrlValidator .

İzin verilen URL şemasını belirtebilir ve durumunuzda kod şöyle görünür:

String[] schema = {"https"};
UrlValidator urlValidator = new UrlValidator(schemes);

if (urlValidator.isValid("http://foo.bar.com/")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}

if (urlValidator.isValid("https://foo.bar.com/")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}
3
katma

Hiyerarşik bir URI, sözdizimine göre ayrışmaya tabidir. [Şema:] [? Sorgusu] [// otorite] [yol] [# parçası]

böylece sizin url_name'inizde bir plan yok. url_name " https://www.google.com " ise, şema https'dir.

refer: http://docs.oracle.com/javase/7/docs/api/java/net/URI.html

2
katma
Bilgileriniz için teşekkürler ... Benim yaklaşımımın yanlış olduğunu anladım. Sonra "www.google.com" kullanıcı girişi ile nasıl bir plan bulabilirim?
katma yazar Ranjith Kumar, kaynak
bu yüzden girişten şema alamıyorum. cevabın bu mu?
katma yazar Ranjith Kumar, kaynak
kesinlikle official birçok resmi URI şeması vardır, bu yüzden sadece girdiden şema alamayız. Örneğin, (http://+ my.file) vauld, (https://+ my.file) vaild ve (ed2k://+ my.file) de vaild. bakın: en.wikipedia.org/wiki/URI_scheme
katma yazar ljp, kaynak
Evet. yapamazsın
katma yazar ljp, kaynak

You can't get it from just URL. It doesn't make sense. Some websites can work with both http & https. It depends upon website itself whether they use SSL certificate or not.

1
katma

Belirtildiği gibi, bir kullanıcı protokol türü de dahil olmak üzere tam url sağlamaya cesaret edemedi. Uygulama, deneme ve hata yaklaşımını kullanabilir, mevcut protokollerin listesini kullanarak bağlantı kurmayı deneyebilir. (http, https). Başarılı isabet, varsayılan olarak kabul edilebilir. Yine, tüm bu kullanılabilirlik hakkında, bu yöntem çirkin hata mesajı ile dikkatsiz bir kullanıcı sadece can sıkıcı daha iyidir.

1
katma
Cevabınız için teşekkürler .. Ben zaten önerilerinizi kullanın (mevcut protokoller listesi kullanarak bağlantı kurmak). Daha fazla kod alır .. Ama kodu azaltmak istiyorum ... Eğer protokol almak mümkün olursa?
katma yazar Ranjith Kumar, kaynak

ranjith- URI (ana etki alanı) ile uygulama içindeki tercih edilen bir protesto arasında bir çeşit eşlemeyi saklayacağım .. bildiğiniz şeylere göre önceden tanımlı eşlemelere sahip olabilirsiniz ve daha sonra Uris ekledikçe bu haritalamanın büyümesine izin verin ..

0
katma