2010-04-12 12 views
2

J'ai une méthode GET qui ressemble à ce qui suit:Comment encoder correctement "[" et "]" dans les requêtes utilisant Apache HttpClient?

GetMethod method = new GetMethod("http://host/path/?key=[\"item\",\"item\"]"); 

Un tel chemin fonctionne très bien quand tapé directement dans un navigateur, mais la ligne ci-dessus lors de son exécution provoque une IllegalArgumentException: URI non valide.

J'ai regardé en utilisant la classe URIUtils, mais sans succès. Y a-t-il un moyen de coder automatiquement ceci (ou d'ajouter une chaîne de requête sur l'URL sans que HttpClient ne soit affiché?).

Répondre

2

La classe a mentionné URIUtils une méthode encodeAll(str) - donc:

new GetMethod("http://host/path/?key=" 
     + URIUtil.encodeAll("[\"item\",\"item\"]")); 
+0

qui donne lieu à une autre exception: Exception dans le thread "principal" java.lang.IllegalArgumentException: le paramètre de l'hôte est null –

+0

@Jason Nichols - voir ma mise à jour. Vous devez encoder seulement le paramètre, pas l'uri entier – Bozho

+0

Vous savez, je jure que j'ai essayé cela tôt et cela n'a pas fonctionné =) Naturellement cela fonctionne maintenant =) Merci! –

2

Vous pouvez également utiliser java.net.URLEncoder:

String myURL = "http://host/path/?" + 
    URLEncoder.encode("key=[\"item\",\"item\"]", UTF-8); 
+0

Et d'après [ce message] (http://www.mail-archive.com/[email protected]/msg02680.html), voici comment cela devrait être fait dans HttpClient 4. – Paul