Comment ajouter des paramètres de requête à une méthode GetMethod (à l'aide de Java commons-httpclient)?

StackOverflow https://stackoverflow.com/questions/217070

  •  03-07-2019
  •  | 
  •  

Question

À l'aide de commons-httpclient for Java d'Apache, quel est le meilleur moyen d'ajouter des paramètres de requête à une instance de GetMethod? Si j'utilise PostMethod, c'est très simple:

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

GetMethod n'a pas de " addParameter " 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 vus codent en dur les paramètres directement dans l'URL, par exemple:

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

ou codez en dur la chaîne de requête, par exemple:

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

Est-ce qu’un de ces modèles doit être préféré? Et pourquoi la différence d’API entre PostMethod et GetMethod? Et à quoi servent toutes ces autres méthodes HttpMethodParams?

Était-ce utile?

La solution

Les méthodes de publication ont des paramètres de publication, mais obtenir des méthodes non .

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

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

Vous trouverez un bon tutoriel de démarrage sur la page Apache Jakarta Commons .

Mettre à jour : comme suggéré dans le commentaire, NameValuePair fonctionne.

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

Autres conseils

Ce n’est pas seulement une question de préférence personnelle. La question pertinente ici est le codage d’URL de vos valeurs de paramètre, afin que celles-ci ne soient pas corrompues ou mal interprétées comme des délimiteurs supplémentaires, etc.

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

En lisant cela, vous pouvez voir que setQueryString (String) NE code PAS ou ne délimite pas vos paramètres & amp; valeurs, alors que setQueryString (NameValuePair []) encodera automatiquement et délimitera les noms et valeurs de vos paramètres. Cette méthode est la meilleure lorsque vous utilisez des données dynamiques, car elles peuvent contenir des esperluettes, des signes identiques, etc.

Essayez 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());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top