我使用的是最新版本的okhttp:okhttp-2.3.0.jar如何通過OkHttp將查詢參數添加到HTTP GET請求?
如何添加查詢參數,以獲得在Java中okhttp要求?
我發現了一個關於android的related question,但這裏沒有答案!
我使用的是最新版本的okhttp:okhttp-2.3.0.jar如何通過OkHttp將查詢參數添加到HTTP GET請求?
如何添加查詢參數,以獲得在Java中okhttp要求?
我發現了一個關於android的related question,但這裏沒有答案!
正如其他答案中提到的,okhttp v2.4提供了使這成爲可能的新功能。
這是不可能的okhttp,there is no method provided that will handle this for you的當前版本。
第二件最好的事情是構建一個url字符串或URL
對象(在java.net.URL
中找到),並將查詢傳遞給okhttp的請求構建器。
正如你所看到的,Request.Builder可以是一個字符串或URL。關於如何建立一個URL
實例可以在What is the idiomatic way to compose a URL or URI in Java?
我們正在添加一個新的HttpUrl類,可以在下一個版本中執行此操作。 –
@JesseWilson這是一個不錯的改進:-) –
網址被破壞.. –
截至目前(okhttp 2.4)中找到,HttpUrl.Builder現在有方法addQueryParameter和addEncodedQueryParameter。
使用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)
這裏是我的截擊
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);
}
}
我使用OkHttp 3.0.1,並且獲取'HttpUr'的方法是'.url()'而不是' .httpUrl()'。感謝您的上課。 –
您可以從現有的HttoUrl創建newBuilder並添加查詢參數存在。示例代碼攔截器:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());
對於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);
}
這正是我需要的。謝謝! –
@harsh_v,很樂意幫忙;) –
我終於做到我的代碼,希望下面的代碼可以幫助你們。我先建使用
HttpUrl httpUrl = new HttpUrl.Builder()
然後將URL傳遞Request requesthttp
希望它可以幫助的URL。
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();
}
}
什麼阻止你簡單地將它包含到URL中? new Request.Builder() .url(「http://publicobject.com?param1=value1¶m2=value2」) .build(); – kaqqao