{"id":235,"date":"2024-02-04T23:46:14","date_gmt":"2024-02-04T22:46:14","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=235"},"modified":"2024-02-23T23:46:56","modified_gmt":"2024-02-23T22:46:56","slug":"datenabruf-per-http-request-mit-dem-java-httpclient","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=235","title":{"rendered":"Datenabruf per HTTP-Request mit dem Java HttpClient"},"content":{"rendered":"\n<p>Der <code>HttpClient<\/code> in Java ist eine leistungsstarke Bibliothek, die es erm\u00f6glicht, Daten \u00fcber das HTTP-Protokoll von einem Server abzurufen. In diesem Artikel werden wir einen detaillierten Blick darauf werfen, wie man den <code>HttpClient<\/code> effektiv einsetzt, um HTTP-GET-Anfragen durchzuf\u00fchren und Daten von Servern zu erhalten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einleitung zum HttpClient in Java<\/h2>\n\n\n\n<p>Der <code>HttpClient<\/code> ist Teil des <code>java.net<\/code>-Packages und wurde mit Java 11 eingef\u00fchrt, um die veraltete <code>HttpURLConnection<\/code> zu ersetzen. Er bietet eine einfachere und flexiblere M\u00f6glichkeit, mit HTTP-GET-Anfragen umzugehen. Bevor wir uns jedoch mit konkreten Beispielen besch\u00e4ftigen, sollten wir sicherstellen, dass die notwendigen Abh\u00e4ngigkeiten in unserem Projekt eingebunden sind.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grundlegende Verwendung des HttpClient<\/h2>\n\n\n\n<p>Um mit dem <code>HttpClient<\/code> zu arbeiten, m\u00fcssen wir zun\u00e4chst eine Instanz davon erstellen. Das geschieht normalerweise \u00fcber einen <code>HttpClient.Builder<\/code>. Hier ist ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.net.http.HttpClient;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">HttpClientExample<\/span> <\/span>{\n\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        HttpClient httpClient = HttpClient.newHttpClient();\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">HTTP-GET-Anfrage senden<\/h2>\n\n\n\n<p>Nachdem wir eine <code>HttpClient<\/code>-Instanz erstellt haben, k\u00f6nnen wir einfache HTTP-GET-Anfragen senden, um Daten von einem Server abzurufen. Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.net.URI;\n<span class=\"hljs-keyword\">import<\/span> java.net.http.HttpRequest;\n<span class=\"hljs-keyword\">import<\/span> java.net.http.HttpResponse;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">HttpClientExample<\/span> <\/span>{\n\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        HttpClient httpClient = HttpClient.newHttpClient();\n\n        <span class=\"hljs-comment\">\/\/ Definieren Sie die URL, von der Daten abgerufen werden sollen<\/span>\n        URI uri = URI.create(<span class=\"hljs-string\">\"https:\/\/api.example.com\/data\"<\/span>);\n\n        <span class=\"hljs-comment\">\/\/ Erstellen Sie eine HTTP-GET-Anfrage<\/span>\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(uri)\n                .GET()\n                .build();\n\n        <span class=\"hljs-keyword\">try<\/span> {\n            <span class=\"hljs-comment\">\/\/ Senden Sie die Anfrage und erhalten Sie die Antwort<\/span>\n            HttpResponse&lt;<span class=\"hljs-built_in\">String<\/span>&gt; response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n            <span class=\"hljs-comment\">\/\/ Verarbeiten Sie die Antwort<\/span>\n            System.out.println(<span class=\"hljs-string\">\"Statuscode: \"<\/span> + response.statusCode());\n            System.out.println(<span class=\"hljs-string\">\"Antwortk\u00f6rper: \"<\/span> + response.body());\n        } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel haben wir eine einfache HTTP-GET-Anfrage an die URL &#8222;https:\/\/api.example.com\/data&#8220; gesendet und die Antwort verarbeitet. Beachten Sie, dass diese Operationen in einem Try-Catch-Block stehen, um mit m\u00f6glichen Ausnahmen umgehen zu k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anpassen von HTTP-GET-Anfragen<\/h2>\n\n\n\n<p>Der <code>HttpClient<\/code> erm\u00f6glicht es uns, HTTP-GET-Anfragen weiter anzupassen. Hier sind einige g\u00e4ngige Anpassungen:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hinzuf\u00fcgen von Headern<\/h3>\n\n\n\n<p>Sie k\u00f6nnen Header zu Ihrer Anfrage hinzuf\u00fcgen, um spezifische Anforderungen zu erf\u00fcllen. Zum Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">HttpRequest request = HttpRequest.newBuilder()\n        .uri(uri)\n        .header(<span class=\"hljs-string\">\"User-Agent\"<\/span>, <span class=\"hljs-string\">\"Java HttpClient Example\"<\/span>)\n        .GET()\n        .build();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel haben wir einen &#8222;User-Agent&#8220;-Header hinzugef\u00fcgt, um den Server dar\u00fcber zu informieren, dass die Anfrage von einem Java-HttpClient stammt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Timeout festlegen<\/h3>\n\n\n\n<p>Sie k\u00f6nnen auch Timeout-Werte f\u00fcr Ihre Anfrage festlegen, um sicherzustellen, dass Ihre Anwendung nicht unn\u00f6tig auf eine Antwort wartet:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">HttpRequest request = HttpRequest.newBuilder()\n        .uri(uri)\n        .timeout(Duration.ofSeconds(10))\n        .GET()\n        .build();<\/code><\/span><\/pre>\n\n\n<p>Hier wurde ein Timeout von 10 Sekunden festgelegt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verarbeiten von Cookies<\/h3>\n\n\n\n<p>Der <code>HttpClient<\/code> kann auch Cookies verarbeiten. Hier ist ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">CookieManager cookieManager = <span class=\"hljs-keyword\">new<\/span> CookieManager();\nHttpClient httpClient = HttpClient.newBuilder()\n        .cookieHandler(<span class=\"hljs-keyword\">new<\/span> CookieHandler(cookieManager))\n        .build();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Basic Authentication mit dem HttpClient<\/h2>\n\n\n\n<p>Manchmal ist es notwendig, sich bei einem Server mit Benutzername und Passwort zu authentifizieren, insbesondere wenn es um gesch\u00fctzte Ressourcen geht. Der <code>HttpClient<\/code> erm\u00f6glicht die Implementierung von Basic Authentication. Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.net.URI;\n<span class=\"hljs-keyword\">import<\/span> java.net.http.HttpRequest;\n<span class=\"hljs-keyword\">import<\/span> java.net.http.HttpResponse;\n<span class=\"hljs-keyword\">import<\/span> java.nio.charset.StandardCharsets;\n<span class=\"hljs-keyword\">import<\/span> java.util.Base64;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">HttpClientBasicAuthExample<\/span> <\/span>{\n\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        HttpClient httpClient = HttpClient.newHttpClient();\n\n        <span class=\"hljs-comment\">\/\/ Definieren Sie die URL, von der Daten abgerufen werden sollen<\/span>\n        URI uri = URI.create(<span class=\"hljs-string\">\"https:\/\/api.example.com\/secure-data\"<\/span>);\n\n        <span class=\"hljs-comment\">\/\/ Benutzername und Passwort f\u00fcr die Basic Authentication<\/span>\n        <span class=\"hljs-built_in\">String<\/span> username = <span class=\"hljs-string\">\"yourUsername\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> password = <span class=\"hljs-string\">\"yourPassword\"<\/span>;\n\n        <span class=\"hljs-comment\">\/\/ Kombinieren Sie Benutzername und Passwort und codieren Sie sie im Base64-Format<\/span>\n        <span class=\"hljs-built_in\">String<\/span> credentials = username + <span class=\"hljs-string\">\":\"<\/span> + password;\n        <span class=\"hljs-built_in\">String<\/span> encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.UTF_8));\n\n        <span class=\"hljs-comment\">\/\/ Erstellen Sie eine HTTP-GET-Anfrage mit Basic Authentication-Header<\/span>\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(uri)\n                .header(<span class=\"hljs-string\">\"Authorization\"<\/span>, <span class=\"hljs-string\">\"Basic \"<\/span> + encodedCredentials)\n                .GET()\n                .build();\n\n        <span class=\"hljs-keyword\">try<\/span> {\n            <span class=\"hljs-comment\">\/\/ Senden Sie die Anfrage und erhalten Sie die Antwort<\/span>\n            HttpResponse&lt;<span class=\"hljs-built_in\">String<\/span>&gt; response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n            <span class=\"hljs-comment\">\/\/ Verarbeiten Sie die Antwort<\/span>\n            System.out.println(<span class=\"hljs-string\">\"Statuscode: \"<\/span> + response.statusCode());\n            System.out.println(<span class=\"hljs-string\">\"Antwortk\u00f6rper: \"<\/span> + response.body());\n        } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel haben wir einen HTTP-GET-Request mit einem zus\u00e4tzlichen &#8222;Authorization&#8220;-Header erstellt. Dieser Header enth\u00e4lt die Benutzername und Passwort im Base64-kodierten Format, getrennt durch einen Doppelpunkt. Beachten Sie, dass die Verwendung von Basic Authentication in unsicheren Umgebungen vermieden werden sollte, es wird empfohlen, sicherere Methoden wie OAuth 2.0 zu verwenden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung von CompletableFuture f\u00fcr asynchrone Anfragen<\/h2>\n\n\n\n<p>Der <code>HttpClient<\/code> unterst\u00fctzt auch asynchrone Anfragen mithilfe von <code>CompletableFuture<\/code>. Dies kann n\u00fctzlich sein, um die Leistung zu verbessern und die Ressourcennutzung zu optimieren. Hier ist ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.net.URI;\n<span class=\"hljs-keyword\">import<\/span> java.net.http.HttpRequest;\n<span class=\"hljs-keyword\">import<\/span> java.net.http.HttpResponse;\n<span class=\"hljs-keyword\">import<\/span> java.util.concurrent.CompletableFuture;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">HttpClientAsyncExample<\/span> <\/span>{\n\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        HttpClient httpClient = HttpClient.newHttpClient();\n\n        <span class=\"hljs-comment\">\/\/ Definieren Sie die URL, von der Daten abgerufen werden sollen<\/span>\n        URI uri = URI.create(<span class=\"hljs-string\">\"https:\/\/api.example.com\/data\"<\/span>);\n\n        <span class=\"hljs-comment\">\/\/ Erstellen Sie eine HTTP-GET-Anfrage<\/span>\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(uri)\n                .GET()\n                .build();\n\n        <span class=\"hljs-comment\">\/\/ Senden Sie die Anfrage asynchron und erhalten Sie die CompletableFuture<\/span>\n        CompletableFuture&lt;HttpResponse&lt;<span class=\"hljs-built_in\">String<\/span>&gt;&gt; future = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString());\n\n        <span class=\"hljs-comment\">\/\/ Verarbeiten Sie die CompletableFuture, wenn die Anfrage abgeschlossen ist<\/span>\n        future.thenAccept(response -&gt; {\n            System.out.println(<span class=\"hljs-string\">\"Statuscode: \"<\/span> + response.statusCode());\n            System.out.println(<span class=\"hljs-string\">\"Antwortk\u00f6rper: \"<\/span> + response.body());\n        });\n\n        <span class=\"hljs-comment\">\/\/ Warten Sie, bis die CompletableFuture abgeschlossen ist (nur f\u00fcr dieses Beispiel, in der Praxis kann dies vermieden werden)<\/span>\n        future.join();\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die <code>sendAsync<\/code>-Methode verwendet, um die Anfrage asynchron zu senden. Die Verarbeitung der Antwort erfolgt dann \u00fcber <code>CompletableFuture<\/code>. Beachten Sie, dass <code>join<\/code> nur in diesem Beispiel verwendet wird, um auf das Ergebnis zu warten, aber in der Praxis kann dies je nach Anwendungsfall vermieden werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Der <code>HttpClient<\/code> in Java bietet eine leistungsf\u00e4hige und flexible M\u00f6glichkeit, mit HTTP-GET-Anfragen umzugehen. In diesem Artikel haben wir die Grundlagen der Verwendung des <code>HttpClient<\/code> f\u00fcr HTTP-GET-Anfragen betrachtet. Wir haben auch einige Anpassungen und fortgeschrittene Funktionen wie das Arbeiten mit Headern, das Festlegen von Timeouts, die Verwendung von CompletableFuture f\u00fcr asynchrone Anfragen und Basic Authentication betrachtet.<\/p>\n\n\n\n<p>Es ist wichtig zu beachten, dass die Sicherheit und Handhabung von Daten in einer produktiven Umgebung von gr\u00f6\u00dfter Bedeutung ist. Beim Implementieren von HTTP-Anfragen sollten immer bew\u00e4hrte Sicherheitspraktiken und Standards eingehalten werden, um potenzielle Risiken zu minimieren.<\/p>\n\n\n\n<p>Der <code>HttpClient<\/code> in Java ist ein m\u00e4chtiges Werkzeug, und die hier behandelten Grundlagen sollten als Ausgangspunkt dienen. Je nach den Anforderungen Ihres Projekts k\u00f6nnen Sie weitere Funktionen des <code>HttpClient<\/code> erkunden und anpassen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der HttpClient in Java ist eine leistungsstarke Bibliothek, die es erm\u00f6glicht, Daten \u00fcber das HTTP-Protokoll von einem Server abzurufen. In diesem Artikel werden wir einen detaillierten Blick darauf werfen, wie man den HttpClient effektiv einsetzt, um HTTP-GET-Anfragen durchzuf\u00fchren und Daten von Servern zu erhalten. Einleitung zum HttpClient in Java Der HttpClient ist Teil des java.net-Packages [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-235","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=235"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/235\/revisions"}],"predecessor-version":[{"id":236,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/235\/revisions\/236"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}