Comment ajouter des paramètres de requête à une requête HTTP GET par OkHttp?
j'utilise la dernière version d'okhttp: okhttp-2.3.0.jar
comment ajouter des paramètres de requête pour obtenir une requête dans okhttp en java ?
j'ai trouvé un question liée à propos d'android, mais aucune réponse ici!
7 réponses
comme mentionné dans l'autre réponse, okhttp v2.4 offre de nouvelles fonctionnalités qui rendent cela possible.
cela n'est pas possible avec la version actuelle d'okhttp, il n'y a pas de méthode à condition que prends ça pour toi .
la meilleure chose suivante est de construire une chaîne d'url ou un URL
objet (trouvé dans java.net.URL
) avec la requête inclus vous-même, et passer que pour le constructeur de requête d'okhttp.
comme vous pouvez le voir, la demande.Builder peut prendre une chaîne ou une URL.
des exemples sur la façon de construire une url peuvent être trouvés à Qu'est-ce que le façon idiomatique de composer une URL ou un 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 enfin fait 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 passer l'URL à Request requesthttp
espérons que cela 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 des méthodes addQueryParameter et addEncodedQueryParameter.
vous pouvez créer un nouveau builder à partir de HttoUrl existant et y ajouter des paramètres de requête. Exemple de code d'interception:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());
utiliser les fonctions de la classe HttpUrl:
//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)
plus détaillé: https://stackoverflow.com/a/32146909/5247331