Wie erstelle ich eine URL oder einen URI in Java? Gibt es einen idiomatischen Weg oder Bibliotheken, die dies leicht tun?
Ich muss zulassen, dass von einer Anforderungszeichenfolge ausgegangen wird, verschiedene URL-Teile (Schema, Host, Pfad, Abfragezeichenfolge) analysiert / geändert werden und das Hinzufügen und automatische Codieren von Abfrageparametern unterstützt wird.
Antworten:
Ab Apache HTTP Component HttpClient 4.1.3 aus dem offiziellen Tutorial :
Bearbeiten: ab v4.2
URIUtils.createURI()
wurde zugunsten von veraltetURIBuilder
:quelle
URIBuilder builder = new URIBuilder() .setScheme("http") .setHost("www.google.com") .setParameters(qparams);
wie @stian sagteAls Autor bin ich wahrscheinlich nicht die beste Person, um zu beurteilen, ob mein URL / URI-Builder gut ist , aber hier ist es trotzdem: https://github.com/mikaelhg/urlbuilder
Ich wollte eine möglichst einfache Komplettlösung ohne Abhängigkeiten außerhalb des JDK, also musste ich meine eigene rollen.
quelle
Apache HTTPClient ?
quelle
Die Verwendung von HTTPClient hat gut funktioniert.
quelle
Es gibt viele Bibliotheken, die Ihnen beim Erstellen von URIs helfen können (erfinden Sie das Rad nicht neu). Hier sind drei, um Ihnen den Einstieg zu erleichtern:
Java EE 7
org.apache.httpcomponents: httpclient: 4.5.2
org.springframework: spring-web: 4.2.5.RELEASE
Siehe auch: GIST> URI Builder-Tests
quelle
UriBuilder
( docs.spring.io/spring-framework/docs/current/javadoc-api/org/… ) undUriBuilderFactory
( docs.spring.io/spring-framework/docs/current/javadoc-api/org) aus /… )Verwenden Sie OkHttp
Es ist 2020 und es gibt eine sehr beliebte Bibliothek namens OkHttp, die 35K- mal auf GitHub gespielt wurde. Mit dieser Bibliothek können Sie eine URL wie folgt erstellen:
quelle
addPathSegment
(nichtaddPathSegments
).Nach dem Lambast für das Vorschlagen der URL-Klasse. Ich werde den Rat des Kommentators befolgen und stattdessen die URI-Klasse vorschlagen . Ich schlage vor, Sie sehen sich die Konstruktoren für einen URI genau an, da die Klasse nach ihrer Erstellung sehr unveränderlich ist.
Ich denke, mit diesem Konstruktor können Sie alles in der URI festlegen, was Sie benötigen könnten.
quelle