Ich verwende die neueste okhttp-Version: okhttp-2.3.0.jar
Wie füge ich Abfrageparameter zur GET-Anfrage in okhttp in Java hinzu?
Ich habe eine verwandte Frage zu Android gefunden, aber hier keine Antwort!
Jerikc XIONG
Ich verwende die neueste okhttp-Version: okhttp-2.3.0.jar
Wie füge ich Abfrageparameter zur GET-Anfrage in okhttp in Java hinzu?
Ich habe eine verwandte Frage zu Android gefunden, aber hier keine Antwort!
Yun CHEN
Für 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);
}
Louis CAD
Hier ist mein Abfangjäger
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);
}
}
Ich habe endlich meinen Code erstellt und hoffe, dass der folgende Code euch helfen kann. Ich erstelle zuerst die URL mit
HttpUrl httpUrl = new HttpUrl.Builder()
Übergeben Sie dann die URL an Request requesthttp
ich hoffe es hilft .
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
Wie in der anderen Antwort erwähnt, bietet okhttp v2.4 neue Funktionen, die dies ermöglichen.
Dies ist mit der aktuellen Version von okhttp nicht möglich, Es gibt keine Methode, die dies für Sie erledigt.
Das nächstbeste ist das Erstellen einer URL-Zeichenfolge oder einer URL
Objekt (gefunden in java.net.URL
), wobei Sie die Abfrage selbst einschließen, und übergeben Sie diese an den Anforderungsgenerator von okhttp.
Wie Sie sehen, kann der Request.Builder entweder einen String oder eine URL annehmen.
Beispiele zum Erstellen einer URL finden Sie unter Was ist die idiomatische Methode zum Erstellen einer URL oder eines URI in Java?
Ab sofort (okhttp 2.4) verfügt HttpUrl.Builder über die Methoden addQueryParameter und addEncodedQueryParameter.
Miha_x64
Sie können einen newBuilder aus vorhandener HttoUrl erstellen und dort Abfrageparameter hinzufügen. Beispiel-Interceptor-Code:
Request req = it.request()
return chain.proceed(
req.newBuilder()
.url(
req.url().newBuilder()
.addQueryParameter("v", "5.60")
.build());
.build());
BaiJiFeiLong
Einzeiliges Beispiel:
assert HttpUrl.parse("https://httpbin.org/get")
.newBuilder()
.addQueryParameter("hello", "world")
.build()
.equals("https://httpbin.org/get?hello=world");
Was hindert Sie daran, es einfach in die URL aufzunehmen? new Request.Builder() .url(“publicobject.com?param1=value1¶m2=value2″) .bauen();
– kaqqao
9. Mai 2015 um 21:42