32 votes

Comment ajouter des paramètres de requête à une GetMethod (en utilisant Java commons-httpclient)?

À l'aide d'Apache commons-httpclient pour Java, quelle est la meilleure façon d'ajouter des paramètres de requête à un GetMethod exemple? Si je suis en utilisant PostMethod, c'est très simple:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

GetMethod n'a pas de "addParameter" la méthode, cependant. J'ai découvert que cela fonctionne:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

Cependant, la plupart des exemples que j'ai vu soit coder en dur les paramètres directement dans l'URL, par exemple:

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

ou dur-code de la chaîne de requête, par exemple:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

Est l'un de ces modèles à privilégier? Et pourquoi l'API divergence entre PostMethod et GetMethod? Et ce sont tous ces autres HttpMethodParams méthodes destinés à être utilisés pour?

22voto

Ryan Guest Points 2262

Post méthodes ont des paramètres post, mais obtenir les méthodes ne sont pas.

Les paramètres de la requête sont incorporés dans l'URL. La version actuelle de HttpClient accepte une chaîne de caractères dans le constructeur. Si vous voulez ajouter la touche, la valeur de la paire ci-dessus, vous pouvez utiliser:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

Un bon tutoriel peut être trouvé sur l' Apache Jakarta Commons page.

Mise à jour: Comme le suggère le commentaire, NameValuePair œuvres.

GetMethod method = new GetMethod("example.com/page";); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

17voto

Steve Jones Points 537

Ce n'est pas seulement une question de préférence personnelle. La question pertinente est ici l'URL de codage des valeurs de ce paramètre, de sorte que les valeurs ne seront pas obtenir endommagé ou mal interprétés comme des séparateurs, etc.

Comme toujours, il est préférable de lire la documentation de l'API dans le détail: HttpClient Documentation de l'API

Cette lecture, vous pouvez voir qu' setQueryString(String) ne sera PAS encoder ou définir vos paramètres et de valeurs, alors que l' setQueryString(NameValuePair[]) sera automatiquement encoder et de définir vos noms et valeurs de paramètres. C'est la meilleure méthode à chaque fois que vous êtes en utilisant des données dynamiques, car il peut contenir des esperluettes, de l'égalité des signes, etc.

9voto

Randal Harleigh Points 41

Essayez-le de cette façon:

     URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X