Как добавить параметры запроса в запрос HTTP GET с помощью OkHttp?
Я использую последнюю версию okhttp:okhttp-2.3.0.Джар
Как добавить параметры запроса, чтобы получить запрос в okhttp в java ?
нашел вопрос о android, но здесь нет ответа!
7 ответов
Как упоминалось в другом ответе, okhttp v2.4 предлагает новую функциональность, которая делает это возможным.
Это невозможно с текущей версией okhttp,нет метода, который будет обрабатывать это для вас.
следующая лучшая вещь построение строки url или
для 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);
}
вот мой перехватчик
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);
}
}
я, наконец, сделал мой код, надеюсь, что следующий код может помочь вам. Сначала я создаю 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();
}
}
на данный момент (okhttp 2.4), HttpUrl.Builder теперь имеет методы addQueryParameter и addEncodedQueryParameter.
вы можете создать newBuilder из существующего HttoUrl и добавить туда параметры запроса. Пример кода перехватчика:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());
используйте функции класса 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)