Wie füge ich Abfrageparameter zu einer HTTP-GET-Anfrage von OkHttp hinzu?

Lesezeit: 3 Minuten

Jerikc XIONGs Benutzeravatar
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 CHENs Benutzeravatar
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);
}

Benutzeravatar von Louis CAD
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();
    }
}

Tims Benutzeravatar
Tim

Wie in der anderen Antwort erwähnt, bietet okhttp v2.4 neue Funktionen, die dies ermöglichen.

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



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.

Geben Sie hier eine Bildbeschreibung ein

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.

Benutzeravatar von Miha_x64
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());

BaiJiFeiLongs Benutzeravatar
BaiJiFeiLong

Einzeiliges Beispiel:

assert HttpUrl.parse("https://httpbin.org/get")
        .newBuilder()
        .addQueryParameter("hello", "world")
        .build()
        .equals("https://httpbin.org/get?hello=world");

1452580cookie-checkWie füge ich Abfrageparameter zu einer HTTP-GET-Anfrage von OkHttp hinzu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy