En java, comment créer HttpsURLConnection ou HttpURLConnection en fonction de l'url?
Je travaille sur un projet où je suis la création d'une classe à exécuter http demandes des clients (ma classe se comporte comme un client). Il prend dans une url et une méthode de requête (GET, POST, PUT, etc) et je veux être en mesure d'analyser les URL et ouvrir un HttpsURLConnection ou HttpURLConnection basée sur le fait qu'il est https ou http (en assumer les urls données sera toujours correcte).
Si je ne les suivants:
URLConnection conn = url.openConnection();
Alors qui va automatiquement créer un URLConnection qui peut accepter à la fois les protocoles http et https, mais si je fais cela, alors je ne peux pas trouver un moyen de définir une méthode de requête (GET, POST, etc...), puisque seule la HttpsURLConnection ou HttpURLConnection classes ont la setRequestMethod méthode.
Si je fais quelque chose comme ce qui suit:
if(is_https)
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
else
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
Puis les connexions sont créées, mais je ne peux pas y accéder en dehors de la si les blocs.
Est-il possible de le faire, ou devrais-je abandonner et utiliser apache httpclient classes?
OriginalL'auteur Adam Plumb | 2009-06-03
Vous devez vous connecter pour publier un commentaire.
HttpsURLConnection s'étend HttpUrlConnection, de sorte que vous n'avez pas besoin de la HttpsUrlConnection, il vous suffit de faire
Oui, c'est de prendre avantage de Java polymorphisme. JVM va appeler la méthode de classe appropriée lors de l'utilisation de ces conn. Si la vérification de type, comme si(is_https) n'a aucun sens dans ce cas. docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
OriginalL'auteur Rob Di Marco
depuis
HttpsURLConnection extends HttpURLConnection
vous pouvez déclarerconn
commeHttpsURLConnection
. De cette façon, vous pouvez accéder à l'interface commune (setRequestMethod()
).Afin d'accéder à l'extension des méthodes (comme
getCipherSuite()
, définie uniquement dans la classe enfantHttpsURLConnection
), vous devez utiliser un plâtre après une instanceof:OriginalL'auteur dfa