HttpURLConnection - "https://" statt "http://"

Ich versuche, das favicon der url, die der Benutzer eingibt, zum Beispiel

_url = "google.com";

Benutze ich HttpUrlConnection, um die Bitmap mit dem favicon aus der /favicon.ico Erweiterung von host-url.

        String faviconString = Uri.parse(_url).getHost() + "/favicon.ico";
        URL faviconUrl = null;
        Bitmap favicon = null;
        try
        {
            faviconString = "http://" + faviconString;
            faviconUrl = new URL(faviconString);
            HttpURLConnection connection = (HttpURLConnection) faviconUrl.openConnection();
            connection.setDoInput(true);
            connection.connect();
            favicon = BitmapFactory.decodeStream(connection.getInputStream());
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return favicon;

Jedoch, da der Benutzer wahrscheinlich nicht geben http:// oder https:// ich noch hinzufügen, hätte es mich. Das problem das ich habe ist, dass, wenn ich http:// vor der url, alles würde funktionieren, aber für https:// einige Websites, die zurückkehren würde, das favicon, das andere würde nur geben Sie mir null. Wie finde ich heraus, welche Seite verwendet https? Soll ich das einfach hinzufügen http:// für jeden Fall? Gibt es irgendwelche websites, die einschränkt, zu streng https und würde null zurückgeben, für die Verwendung http?

  • Dies ist nicht eine sehr zuverlässige Technik, da favicons könnte definiert werden, die innerhalb der Seite, wie diese <link href="/a/different/path.ico" type="image/x-icon" />
  • Gibt es irgendwelche anderen Wege würden Sie vorschlagen? WebIconDatabase und WebView.getFavicon() wäre ideal, aber WebIconDatabase ist veraltet
  • Sorry, ich bin nicht so vertraut mit android, aber das klingt wie ein ziemlich guter Ansatz.
  • Hinweis: zusätzlich zu den oben genannten, können einige websites möglicherweise null zurückgeben, für http und arbeiten auf https
  • das ist im wesentlichen, was diese Frage betrifft
  • Sie gerade bearbeitet Ihre Frage sagen, dass im wesentlichen, was diese Frage über! Ich bezog mich auf die Tatsache, dass ein website können wählen, zu dienen, eines der 2 Systeme oder beide. Und mein Kommentar ist Weg, bevor deine Bearbeitung!
  • Ich habe gerade das bit am Ende zu klären, ist die Frage. Wenn ich nicht wüsste, dass http würde null zurückgeben, warum sollte ich einmal die Mühe mit https, warum sollte ich einmal die Mühe, diese Frage zu stellen.
  • Should I just add http:// for every case? war der Grund, warum ich sagte, was ich sagte. Trotzdem, es ist sehr unrealistisch zu fest dieses Uri.parse(_url).getHost() + "/favicon.ico". Aber wenn Sie darauf bestehen, immer nur diesen Weg, die Sie tun können, einen HEAD-request, um zu wissen, details über die Ressource, ohne auch nur die Daten. prüfen Sie hier: w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4
  • das klingt gut. Es ist nur so, ich bin immer zögerlich, Dinge zu tun, die manuell, wenn in Wirklichkeit gibt es wahrscheinlich etwas in der android-API, mit der es die ich war nicht bewusst, daher die Fragen 🙁
  • in dem Fall, wo Sie immer null zurück, was ist die HTTP-status-code? haben Sie überprüft, um zu sehen, ob es ein 404, oder eine Umleitung, oder etwas anderes? Wenn Ihr ein redirect, ist die API, die Sie verwenden, die Ihnen folgten?

InformationsquelleAutor Jason Hu | 2013-09-20
Schreibe einen Kommentar