Come faccio ad aggiungere parametri di query a GetMethod (usando Java commons-httpclient)?

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

  •  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?

È stato utile?

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());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top