HttpURLConnection - “https://” vs “http://”
Je vais essayer d'obtenir le favicon de l'url que l'utilisateur entre, par exemple
_url = "google.com";
- Je utiliser HttpUrlConnection pour obtenir l'image de la favicon de la /favicon.ico
extension à partir de l'hôte de l'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;
Toutefois, étant donné que l'utilisateur ne sera probablement pas en mesure de spécifier http://
ou https://
, je dois l'ajouter moi-même. Le problème que je vais avoir, c'est que, si j'ajoute http://
en face de l'url, tout fonctionne très bien, mais pour https://
, certains sites serait de retour le favicon, d'autres juste me donner la valeur null. Comment puis-je trouver la page qui utilise https
? Dois-je simplement ajouter http://
pour tous les cas? Existe-il des sites web qui limite strictement https
et serait de retourner la valeur null pour l'utilisation de http
?
<link href="/a/different/path.ico" type="image/x-icon" />
Est-il d'autres moyens pour vous proposer?
WebIconDatabase
et WebView.getFavicon()
serait l'idéal, mais WebIconDatabase
est obsolèteDésolé, je ne suis pas familier avec android, mais cela semble une bonne approche.
Astuce: en plus de ce qui précède, certains sites web peuvent retourner la valeur null pour le http et le travail sur https
Should I just add http:// for every case?
est pourquoi j'ai dit ce que j'ai dit. De toute façon, il est très irréaliste de coder en dur cette Uri.parse(_url).getHost() + "/favicon.ico"
. Toutefois, si vous insistez pour obtenir seulement ce chemin, vous pouvez faire une requête HEAD pour connaître tous les détails de la ressource sans même avoir les données. vérifiez ici: w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4OriginalL'auteur Jason Hu | 2013-09-20
Vous devez vous connecter pour publier un commentaire.
Sauf si vous utilisez user2558882 de idée ou un autre outil dans la nature qui sera tout simplement obtenir un site web favicon pour vous, vous allez avoir à vérifier à la fois les url http et https. Il n'y a pas d'autre moyen pour ce faire. C'est une partie de la difficulté d'utiliser le web.
Peut-être en regardant votre code différemment et à la rupture de ce que vous essayez de le faire dans les plus petites pièces plus faciles à gérer serait un peu mieux?
BTW, d'être concernés au sujet de un ou deux connexions prend plus de temps, puis écrire le code pour faire deux demandes. J'ai presque garantir que google fait deux demandes en tant que de besoin. Et si c'est assez bon pour google, il est assez bon pour moi.
Enfin, si vous commencez à voir que faire des deux demandes est vraiment prendre trop de temps, alors faites quelque chose au sujet de l'amélioration de la performance.
OriginalL'auteur hooknc
Note: je ne suis pas sûr de savoir comment utile, ma réponse serait.
Vous pouvez saisir le favicon à l'aide de google:
retourne:
Vous n'avez pas à spécifier
http
ouhttps
.retourne:
Mais ce n'est pas le favicon que https://my.yorku.ca utilise. Alors, je pense que google renvoie une valeur par défaut pour les sites qui n'offrent pas l'accès de leurs icônes.
Vous pouvez effectivement garder une copie de la valeur par défaut favicon et de vérifier si:
yorku.com/favicon.ico
ne renvoyer la bonne favicon. Donc, je vais probablement encore aller avec/favicon.ico
alternative.Veulent juste s'assurer que vous êtes en utilisant un cas de test.
yorku.com/favicon.ico
n'est pas valide, le domaine esthttp://yorku.ca
. Dans ma réponse, j'ai utiliséhttps://my.yorku.ca
. Quand j'ai essayé d'utiliserhttps://my.yorku.ca/favicon.ico
, j'ai eu une valeur null. Google est une approche qui fonctionne très bien pouryorku.ca
.Mon mauvais dans le premier commentaire, j'ai utilisé des
yorku.ca
dans mon test a fonctionné. Je pense que le retournull
est très bien, sauf pour un cas où l'aide/favicon.ico
redonnenull
etgoogle
donne quelque chose en retour ce n'est pas l'icône par défaut. Quand je serai de retournull
je suis juste à l'aide d'une icône par défaut sur ma fin, tropOui, les deux approches de travail pour
yorku.ca
. Mais l'approche de google ne fonctionne pas pourmy.yorku.ca
. Est-ce que votre approche du travail?Nope, il retourne
null
dans ce cas, je vais juste l'affichage par défaut de favicon sur ma finOriginalL'auteur Vikram
testUrlHttps.getProtocol()
juste analyse du protocole partie de la chaînedownloadURL
assez bien, donc ce n'est pas de trop de l'aide. Le problème était essentiellement lorsque l'utilisateur ne spécifie pas le protocole (http
ouhttps
) lorsqu'ils entrent dans l'URL.Ce qui signifie
https.setHostnameVerifier(DO_NOT_VERYFY);
?OriginalL'auteur DropAndTrap
Façon sur la façon de vérifier si le site web renvoie la valeur null ou un favicon?
J'espère que cela vous aide à
https://
première et de vérifier si le favicon est retournénull
et puis essayezhttp://
? C'est le genre de brute forcé, je préfère ne pas procéder de cette façon, si possible. Après tout, il m'obligerait à ouvrir la connexion deux fois, ce qui est loin d'être idéale.thats right id était juste une idée ce n'est pas le meilleur moyen...
OriginalL'auteur Sebastian Walla
Une autre réponse est la même "faciles".
Juste de rendre à l'utilisateur d'entrer l'url (y compris le protocole) pour leur favicon et valider l'url renvoie un favicon. Si non, alors l'affichage d'une erreur de validation à l'utilisateur final.
Suivantes agile directeurs d'école, faire le moins de travail et voir ce qui fonctionne. Si le plan ne fonctionne pas, alors essayez quelque chose de différent.
OriginalL'auteur hooknc
Essayez ceci lorsque l'URL commence par "https":
OriginalL'auteur Tapa Save