Question

Je voudrais utiliser l'adresse IP résolue pour me connecter au serveur au lieu du nom d'hôte. Voici mes extraits de code:

     // Get domain name from URL
    String domainName = url.substring("http://".length(),
            url.indexOf("/", 8));
    // Get IP address as string
    InetAddress inet = null;
    try {
        inet = InetAddress.getByName(domainName);
    } catch (UnknownHostException e) {
        Log.i(TAG, "The IP address cannot be resolved for " + domainName);
    }
        resolvedIP = inet.getHostAddress(); 

Ici, je suis capable d'obtenir une adresse IP avec succès. Maintenant, j'essaie de remplacer mon URL comme ci-dessous:

url = url.replace(domainName, resolvedIP);

Now I connect to server:
URL download = new URL(url);


conn = (HttpURLConnection) url.openConnection();

conn.getInputStream(); //Throws IO Exception

Je suis en mesure de me connecter avec succès si j'utilise URL tel qu'il est (sans remplacer le nom de domaine par l'adresse IP).

S'il vous plaît laissez-moi savoir si je fais les choses correctement.

Était-ce utile?

La solution

En règle générale, essayez d'utiliser l'URL basée sur le nom d'hôte. Il n'est pas rare d'avoir plusieurs sites Web sur la même IP, distingués uniquement par le nom du site (soi-disant hébergement virtuel). Ce que vous faites ne fonctionnera que pour le cas où il y a un seul site sur une IP donnée.

Il est assez courant pour les balanciers de chargement d'avoir une IP pour chaque "site" qu'il équilibre, mais il n'y a toujours aucune garantie que vous vous connectez au même backend pour deux demandes consécutives. Cependant, il existe des équilibreurs de charge Web qui étendent l'utilisation de l'hébergement virtuel jusqu'à la couche d'équilibrage de charge.

J'essaierais simplement de coller le téléchargement par une URL basée sur le nom d'hôte.

Autres conseils

Une solution pour contourner le problème VHOST consiste à utiliser votre propre serveur DNS et à renvoyer toujours la même adresse IP pour l'hôte auquel vous vous connectez.

Cela ne nécessite aucun changement à votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top