Hoe voeg ek navraagparameters by 'n GetMethod (met Java commons-httpclient)?
-
03-07-2019 - |
Vra
As u Apache se commons-http-kliënt vir Java gebruik, wat is die beste manier om navraagparameters by 'n GetMethod-instansie te voeg?As ek PostMethod gebruik, is dit baie eenvoudig:
PostMethod method = new PostMethod();
method.addParameter("key", "value");
GetMethod het egter nie 'n "addParameter"-metode nie.Ek het ontdek dat dit werk:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
Die meeste van die voorbeelde wat ek al gesien het, kodeer egter die parameters direk in die URL, bv.:
GetMethod method = new GetMethod("http://www.example.com/page?key=value");
of hardkodeer die navraagstring, bv.:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");
Is een van hierdie patrone te verkies?En hoekom die API-teenstrydigheid tussen PostMethod en GetMethod?En waarvoor is al daardie ander HttpMethodParams-metodes bedoel om gebruik te word?
Oplossing
Post metodes post parameters, maar get metodes nie .
Query parameters is ingesluit in die URL. Die huidige weergawe van HttpClient aanvaar 'n string in die constructor. As jy wil die sleutel, waarde pair bo voeg, kan jy gebruik:
String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);
'n goeie begin handleiding kan gevind word op die Apache Jakarta Commons bladsy .
Update :. Soos in die kommentaar voorgestel, NameValuePair werk
GetMethod method = new GetMethod("example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
Ander wenke
Dit is nie net 'n kwessie van persoonlike voorkeur nie.Die tersaaklike kwessie hier is URL-kodering van jou parameterwaardes, sodat die waardes nie korrupteer of verkeerd geïnterpreteer word as ekstra skeidings, ens.
Soos altyd is dit die beste om die API-dokumentasie in detail te lees:HttpClient API Dokumentasie
As u dit lees, kan u dit sien setQueryString(String)
sal NIE jou parameters en waardes URL-kodeer of afbaken nie, terwyl setQueryString(NameValuePair[])
sal outomaties jou parametername en waardes URL-enkodeer en afbaken.Dit is die beste metode wanneer jy dinamiese data gebruik, want dit kan ampersands, gelyke tekens, ens.
Probeer dit op hierdie manier:
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());