Wie kann ich Abfrageparameter an einem GetMethod (unter Verwendung von Java Commons-Httpclient) hinzufügen?

StackOverflow https://stackoverflow.com/questions/217070

  •  03-07-2019
  •  | 
  •  

Frage

Mit Apache commons-Httpclient für Java, was ist der beste Weg, Abfrageparameter zu einer GetMethod Instanz hinzufügen? Wenn ich PostMethod bin mit, es ist sehr einfach:

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

GetMethod keine "addParameter" Methode haben, though. Ich habe entdeckt, dass dies funktioniert:

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

Allerdings sind die meisten der Beispiele, die ich gesehen habe, entweder hart Code die Parameter direkt in die URL, z.

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

oder Fest Code der Abfrage-String, z.

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

Ist eines dieser Muster bevorzugt werden? Und warum die API Diskrepanz zwischen PostMethod und GetMethod? Und was sind all die anderen HttpMethodParams Methoden, die für verwendet werden?

War es hilfreich?

Lösung

Nach Methoden haben Post Parameter, aber get-Methoden nicht .

Abfrageparameter werden in der URL eingebettet. Die aktuelle Version von Httpclient akzeptiert eine Zeichenfolge im Konstruktor. Wenn Sie den Schlüssel, Wert-Paar oben hinzufügen möchten, können Sie verwenden:

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

Ein guter Ausgang Tutorial auf der Apache Jakarta Commons Seite .

Aktualisieren . Wie im Kommentar vorgeschlagen, Namevaluepair arbeitet

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

Andere Tipps

Es ist nicht nur eine Frage des persönlichen Geschmacks. Die relevante Frage ist hier URL-Kodierung der Parameterwerte, so dass die Werte nicht als zusätzliche Trennzeichen beschädigt oder falsch interpretiert bekommen, etc.

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

das Lesen, können Sie, dass setQueryString(String) wird keine URL-Codierung sehen oder Ihre Parameter und Werte begrenzen, während setQueryString(NameValuePair[]) automatisch URL-Kodierung und Ihre Parameternamen und Werte begrenzen. Dies ist die beste Methode, wenn Sie dynamische Daten verwenden, weil es Et-Zeichen, Gleichheitszeichen enthalten könnte, etc.

Versuchen Sie es so aus:

    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());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top