Come faccio ad aggiungere parametri di query a GetMethod (usando Java commons-httpclient)?
-
03-07-2019 - |
Domanda
Usando il commons-httpclient di Apache per Java, qual è il modo migliore per aggiungere parametri di query a un'istanza GetMethod? Se sto usando PostMethod, è molto semplice:
PostMethod method = new PostMethod();
method.addParameter("key", "value");
GetMethod non ha un " addParameter " metodo, però. Ho scoperto che funziona:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
Tuttavia, la maggior parte degli esempi che ho visto codifica direttamente i parametri direttamente nell'URL, ad esempio:
GetMethod method = new GetMethod("http://www.example.com/page?key=value");
o codifica la stringa della query, ad es .:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");
È preferibile uno di questi schemi? E perché la discrepanza API tra PostMethod e GetMethod? E a cosa servono tutti quegli altri metodi HttpMethodParams?
Soluzione
I metodi post hanno parametri post, ma i metodi get non lo fanno .
I parametri della query sono incorporati nell'URL. La versione corrente di HttpClient accetta una stringa nel costruttore. Se si desidera aggiungere la chiave, coppia di valori sopra, è possibile utilizzare:
String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);
Un buon tutorial iniziale è disponibile nella pagina Apache Jakarta Commons .
Aggiorna : come suggerito nel commento, NameValuePair funziona.
GetMethod method = new GetMethod("example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
Altri suggerimenti
Non è solo una questione di preferenze personali. Il problema pertinente qui è la codifica URL dei valori dei parametri, in modo che i valori non vengano danneggiati o interpretati erroneamente come delimitatori extra, ecc.
Come sempre, è meglio leggere la documentazione API in dettaglio: Documentazione API HttpClient
Leggendo questo, puoi vedere che setQueryString (String)
NON codificherà o delimiterà i tuoi parametri & amp; valori, mentre setQueryString (NameValuePair [])
codificherà automaticamente gli URL e delimiteranno i nomi e i valori dei parametri. Questo è il metodo migliore ogni volta che utilizzi dati dinamici, perché potrebbe contenere e commerciali, segni di uguale, ecc.
Provalo in questo modo:
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());