How do I add query parameters to a GetMethod (using Java commons-httpclient)?

72,710

Solution 1

Post methods have post parameters, but get methods do not.

Query parameters are embedded in the URL. The current version of HttpClient accepts a string in the constructor. If you wanted to add the key, value pair above, you could use:

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

A good starting tutorial can be found on the Apache Jakarta Commons page.

Update: As suggested in the comment, NameValuePair works.

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

Solution 2

It's not just a matter of personal preference. The pertinent issue here is URL-encoding your parameter values, so that the values won't get corrupted or misinterpreted as extra delimiters, etc.

As always, it is best to read the API documentation in detail: HttpClient API Documentation

Reading this, you can see that setQueryString(String) will NOT URL-encode or delimit your parameters & values, whereas setQueryString(NameValuePair[]) will automatically URL-encode and delimit your parameter names and values. This is the best method whenever you are using dynamic data, because it might contain ampersands, equal signs, etc.

Solution 3

Try it this way:

    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());
Share:
72,710
Ross
Author by

Ross

Updated on July 09, 2022

Comments

  • Ross
    Ross almost 2 years

    Using Apache's commons-httpclient for Java, what's the best way to add query parameters to a GetMethod instance? If I'm using PostMethod, it's very straightforward:

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

    GetMethod doesn't have an "addParameter" method, though. I've discovered that this works:

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

    However, most of the examples I've seen either hard-code the parameters directly into the URL, e.g.:

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

    or hard-code the query string, e.g.:

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

    Is one of these patterns to be preferred? And why the API discrepancy between PostMethod and GetMethod? And what are all those other HttpMethodParams methods intended to be used for?