2010-11-23 5 views
2

J'ai l'impression d'avoir manqué le bon fil, parce que cela semble avoir été clairement répondu avant, donc désolé si c'est une répétition. J'ai lu beaucoup de threads ici et ailleurs et je n'ai pas vu clairement "Voici comment vous le faites" sorte de réponse à cette question ...Quelle est la meilleure méthode pour prendre une URL de chaîne et l'encoder

Le programme recevra des URLs complets sous forme de chaînes. Par exemple: "http://www.stackoverflow.com/questions/somepage?somequery#somefragment"

Je souhaite prendre cette chaîne et m'assurer qu'elle est correctement codée pour être utilisée dans une connexion comme avec HttpClient. D'après ce que j'ai lu, il semble que la façon de faire est d'utiliser un constructeur URI() avec les différentes parties comme paramètres. Cela soulève alors la question, quelle est la manière la plus fiable de prendre une URL de chaîne, que nous ne connaissons rien, autre que l'URL, et de la décomposer en plusieurs parties nécessaires au constructeur URI().

Voici ce que j'ai reconstitué ensemble. Y a-t-il des défauts dans cette méthode? Ensuite, la variable uri contient un URI codé prêt à l'emploi. Ce code fonctionne jusqu'à présent, mais je veux m'assurer qu'il n'y a pas d'embûches qui pourraient se produire.

Merci

Répondre

4

La classe URI ne fonctionne échapper de ses champs constitutifs dans certaines circonstances. La méthode recommandée pour gérer le codage et le décodage des URL consiste à utiliser l'URI et à convertir ces deux classes en utilisant toURI() et URI.toURL(). Ref: http://download.oracle.com/javase/1.5.0/docs/api/java/net/URL.html

, une note instance URL qui est conforme à la norme RFC 2396 peut être converti en un URI. Cependant, certaines URL qui ne sont pas strictement conformes ne peuvent pas être converties en URI.

URI.toURL est une méthode pratique fonctionne comme si l'invoquer était équivalent à évaluer l'expression new URL(this.toString()) * après la première vérification que cette URI est absolut * e.

0

Je ne pense pas qu'il y ait besoin de construire un URI. L'url construite en utilisant "URL url = nouvelle URL (urlString);" est parfaitement valide pour être utilisé par HttpClient à moins que la construction d'URL ne lève une MalformedURLException.

Si vous allez avoir une chaîne de requête (GET), alors vous devez URLEncode il

+0

La classe d'URL doit être évitée pour la manipulation de chaînes car l'appel de certaines méthodes sur celle-ci provoque des E/S réseau. – McDowell

+0

merci. J'étais au courant de cette situation mais j'ai lu quelque part où cela a été corrigé dans des versions récentes ... ne peut pas se rappeler où –

Questions connexes