Comment vérifier rapidement si l'URL du serveur est disponible
J'ai une URL dans le formulaire
http://www.mywebsite.com/util/conv?a=1&from=%s&to=%s
Et que vous souhaitez vérifier si elle est disponible.
Les liens de redirection moi sur une mauvaise page demande si j'essaie de l'ouvrir avec un navigateur, via le code que je puisse obtenir les données dont j'ai besoin.
À l'aide d'un bloc try-catch sur une requête HTTP procédure est assez lent, donc, je me demandais comment je pourrais ping similaire adresse pour vérifier si son serveur est actif.
J'ai essayé
boolean reachable = InetAddress.getByName(myLink).isReachable(6000);
Mais renvoie toujours false
.
J'ai aussi essayé de
public static boolean exists(String URLName) {
try {
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection();
con.setConnectTimeout(1000);
con.setReadTimeout(1000);
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
Qui renvoie la valeur correcte à la fin du processus, le bit est trop lent si le serveur n'est pas disponible.
MODIFIER
J'ai compris quelle est la cause de la lenteur
a) si le serveur renvoie des données, mais interrompt la demande avant de remplir la demande, le délai d'attente est ignoré et coincé jusqu'à ce que renvoie un Exception
que conduire à l'exécution de rejoindre le bloc catch, c'est la cause de la lenteur de cette méthode, et encore je n'ai pas trouvé une solution valable pour l'éviter.
b) Si je démarre l'appareil android, ouvrez l'Application sans connexion, la valeur false est retourné correctement, si l'application est ouverte avec une connexion internet active et l'appareil a perdu sa connexion internet, il se passe la même chose de l'affaire d'Un (même si j'essaie de le terminer et redémarrez l'Application... je ne sais pas pourquoi, je suppose que quelque chose reste en cache)
Tout ceci semble lié au fait Java URLConnection
ne fournit pas de fail-safe timeout sur le lit. En regardant l'échantillon à ce lien j'ai vu qui utilise un thread pour interrompre la connexion d'une certaine façon, mais si j'ajoute simplement la ligne new Thread(new InterruptThread(Thread.currentThread(), con)).start();
comme dans l'exemple, rien ne change.
Bad Request signifie que votre URL n'est pas valide, mais pas que le serveur n'est pas disponible
Pourriez-vous me donner plus de détails une utilisation a répondu quelque chose de similaire, mais semble aussi lent que d'attente pour l'exception de liés bloc try catch
Permet de dicuss de stackoverflow chat
J'étais en mode hors connexion lorsque vous avez écrit le commentaire, Si nous connecter à différents temps peut-être démarrer un chat serait pas facile, pourquoi ne pas vous donner une réponse? Je serai heureux de les accepter et de upvote si résoudre mon problème, et en plus si quelqu'un a le même problème pourrait trouver une aide utile. Merci
OriginalL'auteur AndreaF | 2014-09-12
Vous devez vous connecter pour publier un commentaire.
ou à l'aide d'exécution:
Vous pouvez essayer
isReachable()
mais il y a un bug déposée et ce commentaire dit que isReachable() nécessite de la racine de l'autorisation:j'ai édité ma réponse, essayez aussi
ping -c 1 www.serverURL.com
J'ai ajouté -1 c après le ping, mais il retourne toujours false, malgré la première méthode sur le même lien de retour correctement vrai
eh bien, vous pouvez consulter cette la Poste, qui a utilisé
java.net.Socket
Pikhwal Voir ma question de mise à jour. Merci
OriginalL'auteur Sagar Pilkhwal
OriginalL'auteur BSavaliya
avez-vous essayé d'utiliser les sockets raw?
Il doit courir plus vite que c'est sur une couche inférieure
OriginalL'auteur eridal
Comme mentionné par 'eridal', qui devrait être plus rapide, ouvrez la prise de courant; cependant, il vous dira qu'un serveur est à l'écoute sur l'hôte et le port, mais pour être sûr, vous devez écrire l'adresse HTTP ou alternativement un bad request (junk), vous devriez obtenir HTTP/1.1 400 Bad Request. Par la lecture de la première ligne s'est retourné, s'il contient HTTP, alors vous êtes sûr que le serveur est un serveur HTTP. De cette façon, vous êtes sûr que le serveur est disponible ainsi qu'un serveur HTTP.
C'est dans le prolongement de la réponse ci-dessus par eridal.
OriginalL'auteur Ironluca
J'ai eu le même problème le mois dernier, et quelqu'un m'a aidé en option avec un exemple. J'aimerais vous proposer le même
si le retour vrai que votre url serveur est disponible d'autre n'est pas disponible actuellement.
comme je l'ai dit dans ma question ce code rteturns toujours faux avec mon lien
Votre lien vous redirige vers le lien "website.1and1.com/#top" donc essaye avec website.1and1.com . Elle renvoie true
OriginalL'auteur A_rmas
Essayer ce code
OriginalL'auteur Yossi Gruner
Code ci-dessous attend jusqu'à ce que la page web est disponible:
OriginalL'auteur khajappa
ici l'écrivain suggère ceci:
lire le lien. sa semble très bon,
EDIT:
dans mon exp de l'utiliser, c'est pas aussi rapide de cette méthode:
ils sont un peu différent, mais dans la fonctionnalité pour la simple vérification de la connexion à internet la première méthode peut devenir lent en raison de la connexion des variables.
OriginalL'auteur Emad
OriginalL'auteur HuongNV