studio java http-get okhttp query-parameters

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.

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

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