Escapezeichen für kaufmännische Und-Zeichen in URLs für HttpClient-Anfragen
-
23-09-2019 - |
Frage
Ich habe also Java-Code, der Jakarta HttpClient wie folgt verwendet:
URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());
Das Problem ist, dass wenn title
Enthält alle kaufmännischen Und-Zeichen (&), sie gelten als Parametertrennzeichen und die Anfrage wird verrückt ...und wenn ich sie durch das URL-escaped-Äquivalent ersetze %26
, dann wird dies von getEscapedPathQuery() doppelt maskiert %2526
.
Ich arbeite derzeit daran, dies zu umgehen, indem ich den Schaden im Grunde genommen danach behebe:
URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));
Aber dort hat das wäre eine schönere Möglichkeit, das zu machen, oder?Beachten Sie, dass der Titel eine beliebige Anzahl unvorhersehbarer UTF-8-Zeichen usw. enthalten kann. Daher ist es erforderlich, alles andere zu maskieren.
Lösung
Bitte schön:
import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());
Prüfen java.net.urlencoder Für mehr Information.
Andere Tipps
Warum rufst du GetScapedPathQuery () an, wenn du das Flucht nicht willst? Entscheide einfach, wer es ist, und sei konsequent.
Benutzen Sie die URLEncoder Klasse.
Utility-Klasse für die HTML-Formularkodierung.Diese Klasse enthält statische Methoden zum Konvertieren einer Zeichenfolge in die Anwendung/X-WWW-Form-Urscoded-MIME-MIME-Format.Weitere Informationen zur HTML -Formcodierung finden Sie in der HTML -Spezifikation.