391 Stimmen

HTTP-URL-Adresskodierung in Java

Meine Java-Standalone-Anwendung erhält vom Benutzer eine URL (die auf eine Datei verweist), und ich muss sie anklicken und herunterladen. Das Problem, das ich konfrontiert bin, ist, dass ich nicht in der Lage bin, die HTTP-URL-Adresse richtig zu kodieren...

Ejemplo:

URL:  http://search.barnesandnoble.com/booksearch/first book.pdf

java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");

gibt mich zurück:

http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf

Aber was ich will, ist

http://search.barnesandnoble.com/booksearch/first%20book.pdf

(Leerzeichen ersetzt durch %20)

Ich denke URLEncoder ist nicht dafür ausgelegt, HTTP-URLs zu kodieren... In der JavaDoc heißt es "Utility class for HTML form encoding"... Gibt es eine andere Möglichkeit, dies zu tun?

2voto

jschnasse Punkte 6745

Verwenden Sie die folgende Java-Standardlösung (durchläuft etwa 100 der Testfälle, die von Web-Plattform-Tests ) :

0. Test, ob URL bereits verschlüsselt ist .

1. URL in strukturelle Teile aufteilen. Verwenden Sie java.net.URL für sie.

2. Codieren Sie jedes Strukturteil richtig!

3. Verwenden Sie IDN.toASCII(putDomainNameHere) zu Punycode den Hostnamen verschlüsseln!

4. Verwenden Sie java.net.URI.toASCIIString() zur prozentualen Kodierung, NFC-kodierter Unicode - (besser wäre NFKC!).

Mehr dazu finden Sie hier: https://stackoverflow.com/a/49796882/1485527

2voto

Nick Allen Punkte 1363

Wenn Sie Spring verwenden, können Sie versuchen org.springframework.web.util.UriUtils#encodePath

2voto

Martin Dimitrov Punkte 4668

Ergänzend zur Antwort von Carlos Heuberger: Wenn eine andere als die Standardeinstellung (80) benötigt wird, sollte der 7-Param-Konstruktor verwendet werden:

URI uri = new URI(
        "http",
        null, // this is for userInfo
        "www.google.com",
        8080, // port number as int
        "/ig/api",
        "weather=São Paulo",
        null);
String request = uri.toASCIIString();

0voto

Richard R Punkte 843

Ich hatte das gleiche Problem. Ich habe das Problem durch Entsingung gelöst:

android.net.Uri.encode(urlString, ":/");

Er kodiert die Zeichenfolge, lässt aber ":" und "/" aus.

0voto

Uriah Carpenter Punkte 6506

Ich habe ein neues Projekt erstellt, das bei der Erstellung von HTTP-URLs hilft. Die Bibliothek wird automatisch URL-Segmente und Abfrageparameter kodieren.

Sie können den Quellcode einsehen und eine Binärdatei herunterladen unter https://github.com/Widen/urlbuilder

Die Beispiel-URL in dieser Frage:

new UrlBuilder("search.barnesandnoble.com", "booksearch/first book.pdf").toString()

produziert

http://search.barnesandnoble.com/booksearch/first%20book.pdf

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