java - studio - okhttp maven
¿Cómo agregar parámetros de consulta a una solicitud HTTP GET por OkHttp? (7)
Estoy usando la última versión de okhttp : okhttp-2.3.0.jar
¿Cómo agregar parámetros de consulta a la solicitud GET en okhttp en java?
Encontré una pregunta relacionada con Android, ¡pero no hay respuesta aquí!
A partir de ahora (okhttp 2.4), HttpUrl.Builder ahora tiene métodos addQueryParameter y addEncodedQueryParameter.
Aquí está mi 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);
}
}
Como se mencionó en la otra respuesta, okhttp v2.4 ofrece una nueva funcionalidad que hace esto posible.
Esto no es posible con la versión actual de okhttp, no se proporciona ningún método que maneje esto por usted .
Lo siguiente mejor es crear una cadena de URL o un objeto de URL
(que se encuentra en java.net.URL
) con la consulta incluida, y pasarla al generador de solicitudes de okhttp.
Como puede ver, el Request.Builder puede tomar una cadena o una URL.
Se pueden encontrar ejemplos sobre cómo crear una url en ¿Cuál es la forma idiomática de componer una URL o URI en Java?
Finalmente hice mi código, espero que el siguiente código pueda ayudarlos, chicos. Yo construyo la URL primero usando
HttpUrl httpUrl = new HttpUrl.Builder()
Luego pasa la URL a la Request requesthttp
de Request requesthttp
espero que te Request requesthttp
.
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();
}
}
Para 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);
}
Puede crear un newBuilder a partir de HttoUrl existente y agregar parámetros de consulta allí. Código interceptor de muestra:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());
Usa las funciones de la clase 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)
más detallado: https://.com/a/32146909/5247331