How to add query parameters to a HTTP GET request by OkHttp?

JavaHttp GetOkhttpQuery Parameters

Java Problem Overview


I am using the latest okhttp version: okhttp-2.3.0.jar

How to add query parameters to GET request in okhttp in java ?

I found a related question about android, but no answer here!

Java Solutions


Solution 1 - Java

For okhttp3:

private static final OkHttpClient client = new OkHttpClient().newBuilder()
    .connectTimeout(10, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

public static void get(String url, Map<String,String>params, Callback responseCallback) {
    HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();
    if (params != null) {
       for(Map.Entry<String, String> param : params.entrySet()) {
           httpBuilder.addQueryParameter(param.getKey(),param.getValue());
       }
    }
    Request request = new Request.Builder().url(httpBuilder.build()).build();
    client.newCall(request).enqueue(responseCallback);
}

Solution 2 - Java

Here's my interceptor

    private static class AuthInterceptor implements Interceptor {

    private String mApiKey;

    public AuthInterceptor(String apiKey) {
        mApiKey = apiKey;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        HttpUrl url = chain.request().httpUrl()
                .newBuilder()
                .addQueryParameter("api_key", mApiKey)
                .build();
        Request request = chain.request().newBuilder().url(url).build();
        return chain.proceed(request);
    }
}

Solution 3 - Java

As mentioned in the other answer, okhttp v2.4 offers new functionality that does make this possible.

See http://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/HttpUrl.Builder.html#addQueryParameter-java.lang.String-java.lang.String-



This is not possible with the current version of okhttp, there is no method provided that will handle this for you.

The next best thing is building an url string or an URL object (found in java.net.URL) with the query included yourself, and pass that to the request builder of okhttp.

enter image description here

As you can see, the Request.Builder can take either a String or an URL.

Examples on how to build an url can be found at https://stackoverflow.com/questions/883136/is-there-a-good-url-builder-for-java

Solution 4 - Java

I finally did my code, hope the following code can help you guys. I build the URL first using

> HttpUrl httpUrl = new HttpUrl.Builder()

Then pass the URL to Request requesthttp hope it helps .

public class NetActions {

    OkHttpClient client = new OkHttpClient();

    public String getStudentById(String code) throws IOException, NullPointerException {

        HttpUrl httpUrl = new HttpUrl.Builder()
                .scheme("https")
                .host("subdomain.apiweb.com")
                .addPathSegment("api")
                .addPathSegment("v1")
                .addPathSegment("students")
                .addPathSegment(code) // <- 8873 code passthru parameter on method
                .addQueryParameter("auth_token", "71x23768234hgjwqguygqew")
                // Each addPathSegment separated add a / symbol to the final url
                // finally my Full URL is: 
                // https://subdomain.apiweb.com/api/v1/students/8873?auth_token=71x23768234hgjwqguygqew
                .build();

        System.out.println(httpUrl.toString());

        Request requesthttp = new Request.Builder()
                .addHeader("accept", "application/json")
                .url(httpUrl) // <- Finally put httpUrl in here
                .build();

        Response response = client.newCall(requesthttp).execute();
        return response.body().string();
    }
}

Solution 5 - Java

As of right now (okhttp 2.4), HttpUrl.Builder now has methods addQueryParameter and addEncodedQueryParameter.

Solution 6 - Java

You can create a newBuilder from existing HttoUrl and add query parameters there. Sample interceptor code:

    Request req = it.request()
    return chain.proceed(
        req.newBuilder()
            .url(
                req.url().newBuilder()
                .addQueryParameter("v", "5.60")
                .build());
    .build());

Solution 7 - Java

Use HttpUrl class's functions:

//adds the pre-encoded query parameter to this URL's query string
addEncodedQueryParameter(String encodedName, String encodedValue)

//encodes the query parameter using UTF-8 and adds it to this URL's query string
addQueryParameter(String name, String value)

more detailed: https://stackoverflow.com/a/32146909/5247331

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJerikc XIONGView Question on Stackoverflow
Solution 1 - JavaYun CHENView Answer on Stackoverflow
Solution 2 - JavaLouis CADView Answer on Stackoverflow
Solution 3 - JavaTimView Answer on Stackoverflow
Solution 4 - Javamarcode_elyView Answer on Stackoverflow
Solution 5 - JavaSofi Software LLCView Answer on Stackoverflow
Solution 6 - JavaMiha_x64View Answer on Stackoverflow
Solution 7 - JavaVitaly ZinchenkoView Answer on Stackoverflow