J'utilise la dernière version de okhttp: okhttp-2.3.0.jar
Comment ajouter des paramètres de requête à la requête GET dans okhttp dans Java?
J'ai trouvé une question connexe à propos d'Android, mais pas de réponse ici!
Comme mentionné dans l'autre réponse, okhttp v2.4 offre une nouvelle fonctionnalité qui rend cela possible.
Ce n'est pas possible avec la version actuelle de okhttp, il n'y a pas de méthode fournie pour gérer cela pour vous .
La meilleure chose à faire est de créer une chaîne d’URL ou un objet URL
(trouvé dans Java.net.URL
) avec la requête incluse et transmettez-la au constructeur de requêtes de okhttp.
Comme vous pouvez le constater, Request.Builder peut prendre une chaîne ou une URL.
Des exemples sur la façon de construire une URL peuvent être trouvés à Quelle est la façon idiomatique de composer une URL ou une URI en Java?
Pour 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 httpBuider = HttpUrl.parse(url).newBuilder();
if (params != null) {
for(Map.Entry<String, String> param : params.entrySet()) {
httpBuider.addQueryParameter(param.getKey(),param.getValue());
}
}
Request request = new Request.Builder().url(httpBuider.build()).build();
client.newCall(request).enqueue(responseCallback);
}
Voici mon intercepteur
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);
}
}
J'ai finalement créé mon code, j'espère que le code suivant pourra vous aider. Je construis d'abord l'URL en utilisant
HttpUrl httpUrl = new HttpUrl.Builder()
Puis passez l'URL à Request requesthttp
J'espère que ça aide .
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();
}
}
À partir de maintenant (okhttp 2.4), HttpUrl.Builder a maintenant les méthodes addQueryParameter et addEncodedQueryParameter.
Vous pouvez créer un newBuilder à partir de HttoUrl existant et y ajouter des paramètres de requête. Exemple de code d'intercepteur:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());