33 Stimmen

Wie füge ich Abfrageparameter zu einer GetMethod hinzu (mit Java commons-httpclient)?

Bei der Verwendung von Apache's commons-httpclient für Java, wie füge ich am besten Abfrageparameter zu einer GetMethod-Instanz hinzu? Wenn ich PostMethod verwende, ist das sehr einfach:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

GetMethod hat jedoch keine "addParameter"-Methode. Ich habe herausgefunden, dass dies funktioniert:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

Die meisten Beispiele, die ich gesehen habe, enthalten jedoch die Parameter direkt in der URL, z.B.:

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

oder codieren den Abfragestring direkt, z.B.:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

Welches dieser Muster ist vorzuziehen? Und warum die API-Diskrepanz zwischen PostMethod und GetMethod? Und wofür sollen all diese anderen HttpMethodParams-Methoden verwendet werden?

22voto

Ryan Guest Punkte 5611

Post-Methoden haben Post-Parameter, aber Get-Methoden nicht.

Abfrageparameter sind in der URL eingebettet. Die aktuelle Version von HttpClient akzeptiert einen String im Konstruktor. Wenn Sie das obige Schlüssel-Wert-Paar hinzufügen möchten, könnten Sie Folgendes verwenden:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

Ein guter Einstiegstutorial finden Sie auf der Apache Jakarta Commons Seite.

Aktualisierung: Wie in einem Kommentar vorgeschlagen, funktioniert NameValuePair.

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
});

18voto

Steve Jones Punkte 1430

Es geht hier nicht nur um persönliche Vorlieben. Der relevante Punkt hier ist das URL-Codieren Ihrer Parameterwerte, damit die Werte nicht beschädigt oder als zusätzliche Trennzeichen interpretiert werden.

Wie immer ist es am besten, die API-Dokumentation im Detail zu lesen: HttpClient API-Dokumentation

Beim Lesen dessen können Sie sehen, dass setQueryString(String) NICHT Ihre Parameter und Werte URL-codiert oder trennt, während setQueryString(NameValuePair[]) automatisch Ihre Parameter und Werte URL-codiert und trennt. Dies ist die beste Methode, wenn Sie dynamische Daten verwenden, da sie Prozentzeichen, Gleichheitszeichen usw. enthalten könnte.

10voto

Randal Harleigh Punkte 101

Probieren Sie es auf diese Weise:

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X