Jerikc XIONG
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í!
yun chen
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 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);
}
Luis CAD
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().url()
.newBuilder()
.addQueryParameter("api_key", mApiKey)
.build();
Request request = chain.request().newBuilder().url(url).build();
return chain.proceed(request);
}
}
Finalmente hice mi código, espero que el siguiente código pueda ayudarlos. Primero construyo la URL usando
HttpUrl httpUrl = new HttpUrl.Builder()
Luego pasa la URL a Request requesthttp
Espero eso ayude .
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();
}
}
Tim
Como se mencionó en la otra respuesta, okhttp v2.4 ofrece una nueva funcionalidad que lo hace 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 construir una cadena de URL o un URL
objeto (encontrado en java.net.URL
) con la consulta incluida, y pásela al generador de solicitudes de okhttp.
Como puede ver, 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?
A partir de ahora (okhttp 2.4), HttpUrl.Builder ahora tiene métodos addQueryParameter y addEncodedQueryParameter.
miha_x64
Puede crear un newBuilder a partir de HttoUrl existente y agregar allí parámetros de consulta. Ejemplo de código de interceptor:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());
BaiJiFeiLong
Ejemplo de una línea:
assert HttpUrl.parse("https://httpbin.org/get")
.newBuilder()
.addQueryParameter("hello", "world")
.build()
.equals("https://httpbin.org/get?hello=world");
¿Qué te impide simplemente incluirlo en la URL? nueva Solicitud.Constructor() .url(“publicobject.com?param1=valor1¶m2=valor2″) .construir();
– kaqqao
9 mayo 2015 a las 21:42