Я использую последнюю версию okhttp: okhttp-2.3.0.jar
Как добавить параметры запроса в запрос GET в okhttp в java?
Я нашел связанный вопрос об андроиде, но здесь нет ответа!
Я использую последнюю версию okhttp: okhttp-2.3.0.jar
Как добавить параметры запроса в запрос GET в okhttp в java?
Я нашел связанный вопрос об андроиде, но здесь нет ответа!
Как уже упоминалось в другом ответе, okhttp v2.4 предлагает новую функциональность, которая делает это возможным.
Это невозможно в текущей версии okhttp, нет метода, который будет обрабатывать это для вас.
Следующее лучшее - это создание строки url или объекта URL
(найденного в java.net.URL
) с запросом, включенным самим собой, и передать его строителю запросов okhttp.
Как вы можете видеть, Request.Builder может принимать либо строку, либо URL.
Примеры построения URL-адреса можно найти в Каков идиоматический способ создания URL-адреса или URI в Java?
Здесь мой перехватчик
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);
}
}
Для 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);
}
Как сейчас (okhttp 2.4), HttpUrl.Builder теперь имеет методы addQueryParameter и addEncodedQueryParameter.
Я, наконец, сделал свой код, надеюсь, что следующий код может помочь вам, ребята. Сначала я создаю URL-адрес, используя
HttpUrl httpUrl = new HttpUrl.Builder()
Затем передайте URL-адрес 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();
}
}
Используйте функции класса HttpUrl:
//adds the pre-encoded query parameter to this URL query string
addEncodedQueryParameter(String encodedName, String encodedValue)
//encodes the query parameter using UTF-8 and adds it to this URL query string
addQueryParameter(String name, String value)
более подробно: fooobar.com/questions/415504/...
Вы можете создать newBuilder из существующего HttoUrl и добавить там параметры запроса. Пример кода перехватчика:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());