Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis
Vorwort
1 Neues in Java 8 und Java 7
2 Fortgeschrittene String-Verarbeitung
3 Threads und nebenläufige Programmierung
4 Datenstrukturen und Algorithmen
5 Raum und Zeit
6 Dateien, Verzeichnisse und Dateizugriffe
7 Datenströme
8 Die eXtensible Markup Language (XML)
9 Dateiformate
10 Grafische Oberflächen mit Swing
11 Grafikprogrammierung
12 JavaFX
13 Netzwerkprogrammierung
14 Verteilte Programmierung mit RMI
15 RESTful und SOAP-Web-Services
16 Technologien für die Infrastruktur
17 Typen, Reflection und Annotationen
18 Dynamische Übersetzung und Skriptsprachen
19 Logging und Monitoring
20 Sicherheitskonzepte
21 Datenbankmanagement mit JDBC
22 Java Native Interface (JNI)
23 Dienstprogramme für die Java-Umgebung
Stichwortverzeichnis

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java SE 8 Standard-Bibliothek von Christian Ullenboom
Das Handbuch für Java-Entwickler
Buch: Java SE 8 Standard-Bibliothek

Java SE 8 Standard-Bibliothek
Pfeil 13 Netzwerkprogrammierung
Pfeil 13.1 Grundlegende Begriffe
Pfeil 13.2 URI und URL
Pfeil 13.2.1 Die Klasse URI
Pfeil 13.2.2 Die Klasse URL
Pfeil 13.2.3 Informationen über eine URL *
Pfeil 13.2.4 Der Zugriff auf die Daten über die Klasse URL
Pfeil 13.3 Die Klasse URLConnection *
Pfeil 13.3.1 Methoden und Anwendung von URLConnection
Pfeil 13.3.2 Protokoll- und Content-Handler
Pfeil 13.3.3 Im Detail: Von der URL zur URLConnection
Pfeil 13.3.4 Der Protokoll-Handler für JAR-Dateien
Pfeil 13.3.5 Basic Authentication und Proxy-Authentifizierung
Pfeil 13.4 Mit GET und POST Daten übergeben *
Pfeil 13.4.1 Kodieren der Parameter für Serverprogramme
Pfeil 13.4.2 In Wikipedia suchen und mit GET-Request absenden
Pfeil 13.4.3 POST-Request absenden
Pfeil 13.5 Host- und IP-Adressen
Pfeil 13.5.1 Lebt der Rechner?
Pfeil 13.5.2 IP-Adresse des lokalen Hosts
Pfeil 13.5.3 Das Netz ist klasse *
Pfeil 13.5.4 NetworkInterface
Pfeil 13.6 Mit dem Socket zum Server
Pfeil 13.6.1 Das Netzwerk ist der Computer
Pfeil 13.6.2 Sockets
Pfeil 13.6.3 Eine Verbindung zum Server aufbauen
Pfeil 13.6.4 Server unter Spannung – die Ströme
Pfeil 13.6.5 Die Verbindung wieder abbauen
Pfeil 13.6.6 Informationen über den Socket *
Pfeil 13.6.7 Reine Verbindungsdaten über SocketAddress *
Pfeil 13.7 Client-Server-Kommunikation
Pfeil 13.7.1 Warten auf Verbindungen
Pfeil 13.7.2 Ein Multiplikationsserver
Pfeil 13.7.3 Blockierendes Lesen
Pfeil 13.8 Apache HttpComponents und Commons Net *
Pfeil 13.8.1 HttpComponents
Pfeil 13.8.2 Apache Commons Net
Pfeil 13.9 Arbeitsweise eines Webservers *
Pfeil 13.9.1 Das Hypertext Transfer Protocol (HTTP)
Pfeil 13.9.2 Anfragen an den Server
Pfeil 13.9.3 Die Antworten vom Server
Pfeil 13.9.4 Webserver mit com.sun.net.httpserver.HttpServer
Pfeil 13.10 Verbindungen durch einen Proxy-Server *
Pfeil 13.10.1 System-Properties
Pfeil 13.10.2 Verbindungen durch die Proxy-API
Pfeil 13.11 Datagram-Sockets *
Pfeil 13.11.1 Die Klasse DatagramSocket
Pfeil 13.11.2 Datagramme und die Klasse DatagramPacket
Pfeil 13.11.3 Auf ein hereinkommendes Paket warten
Pfeil 13.11.4 Ein Paket zum Senden vorbereiten
Pfeil 13.11.5 Methoden der Klasse DatagramPacket
Pfeil 13.11.6 Das Paket senden
Pfeil 13.12 E-Mail *
Pfeil 13.12.1 Wie eine Elektropost um die Welt geht
Pfeil 13.12.2 Das Simple Mail Transfer Protocol und RFC 822
Pfeil 13.12.3 POP (Post Office Protocol)
Pfeil 13.12.4 Die JavaMail API
Pfeil 13.12.5 E-Mails mittels POP3 abrufen
Pfeil 13.12.6 Multipart-Nachrichten verarbeiten
Pfeil 13.12.7 E-Mails versenden
Pfeil 13.12.8 Ereignisse und Suchen
Pfeil 13.13 Tiefer liegende Netzwerkeigenschaften *
Pfeil 13.13.1 MAC-Adressen auslesen
Pfeil 13.13.2 Internet Control Message Protocol (ICMP)
Pfeil 13.14 Zum Weiterlesen
 
Zum Seitenanfang

13.4Mit GET und POST Daten übergeben * Zur vorigen ÜberschriftZur nächsten Überschrift

Beim Aufruf einer Webseite können wir Parameter übergeben – beim Ansprechen einer Suchmaschine etwa den Suchbegriff. Es gibt nun zwei Möglichkeiten, wie diese Parameter zum Server kommen:

  • Die Parameter (auch Query-Strings genannt) werden an die URL angehängt (GET-Methode).

  • Die Daten werden zur Standardeingabe des Webservers gesendet (POST-Methode). Das Serverprogramm muss dann aus dieser Eingabe lesen.

GET und POST unterscheiden sich auch in der Länge der übertragenen Daten. Bei vielen Systemen ist die Länge einer GET-Anfrage auf 1.024 Byte beschränkt. POST-Anfragen sind in ihrer Länge unbegrenzt.

Daten nach der GET-Methode verschicken

Im Fall der GET-Anfrage steht der Anfrage-String (Query-String) hinter dem Fragezeichen, das wiederum hinter der Pfadangabe steht. Mehrere Query-Strings trennt das &-Zeichen. Unter Java setzen wir einfach einen Befehl ab, indem wir ein neues URL-Objekt erzeugen und anschließend den Inhalt auslesen.

Daten nach der POST-Methode versenden

Die Klasse URLConnection bietet die schon bekannte Methode getOutputStream() an, die eine Verbindung zur Eingabe des serverseitigen Programms möglich macht (POST-Methode).

 
Zum Seitenanfang

13.4.1Kodieren der Parameter für Serverprogramme Zur vorigen ÜberschriftZur nächsten Überschrift

Da nicht alle Zeichen in einer URL-Zeile erlaubt sind, müssen sie umkodiert werden. So sind zum Beispiel keine Leerzeichen gültig; sie werden durch ein Pluszeichen umkodiert. Es gibt noch weitere zu übersetzende Zeichen, so das Plus-, Gleichheits- und Und-Zeichen. Von diesen Symbolen wird die Hex-Repräsentation als ASCII übersandt, aus »Ulli + Tina« wird dann »Ulli+%2B+Tina«. Aus dem Leerzeichen wird ein Plus, und aus dem Plus wird »%2B«.

Wollten wir einen String dieser Art zu einer URL zusammenbauen, um etwa eine Anfrage an ein Suchprogramm zu formulieren, müssen wir den String nicht kodieren. Dies übernimmt die Java-Klasse URLEncoder; den Weg zurück übernimmt URLDecoder.

Listing 13.7com/tutego/insel/net/URLEncoderDemo.java, main()

PrintStream o = System.out;
String utf = StandardCharsets.UTF_8.name();
o.println( URLEncoder.encode( "L e e r z eichen", utf ) ); // L+e+e+r+z+eichen
o.println( URLEncoder.encode( "20%Prozent%", utf ) ); // 20%25Prozent%25
o.println( URLEncoder.encode( "hat+ein+Plus", utf ) ); // hat%2Bein%2BPlus
o.println( URLEncoder.encode( "/temp/data/", utf ) ); // %2Ftemp%2Fdata%2F
o.println( URLEncoder.encode( "Sagt \"Gänse\"", utf ) ); // Sagt+%22G%C3%A4nse%22
o.println( URLEncoder.encode( ":Doppelpunkt:", utf ) ); // %3ADoppelpunkt%3A
o.println( URLEncoder.encode( "a=b=c", utf ) ); // a%3Db%3Dc
o.println( URLEncoder.encode( "Und&Co", utf ) ); // Und%26Co
o.println( URLEncoder.encode( "..Punkte..", utf ) ); // ..Punkte..

Die Klasse URLEncoder bietet encode(…) und URLDecoder entsprechend decode(…):

class java.net.URLEncoder
  • static String encode(String s, String enc) throws UnsupportedEncodingException
    Kodiert einen String s mit einem bestimmten Encoding.

class java.net.URLDecoder
  • static String decode(String s, String enc) throws UnsupportedEncodingException
    Dekodiert einen String s mit einem bestimmten Encoding.

 
Zum Seitenanfang

13.4.2In Wikipedia suchen und mit GET-Request absenden Zur vorigen ÜberschriftZur nächsten Überschrift

Wikipedia bietet eine API, mit denen sich Aufgaben wie die Suche nach Begriffen oder das Ändern von Seiten automatisieren lassen. Nehmen wir an, wir wollten nach »GmbH & Co. KG« suchen, dann hat für eine Suche mit dem Ausgabeformat Text die Wikipedia-Such-URL folgenden Aufbau: https://de.wikipedia.org/w/api.php?action=query&generator=search&format=txt&gsrsearch=GmbH_%26_Co._KG. Wir können gut erkennen, dass im Such-String das Leerzeichen durch einen Unterstrich ersetzt ist und das & durch %26.

Resultat der Anfrage ist ein Ergebnis im Textformat, das Zeilen wie diese enthält:

[16945] => Array
(
[pageid] => 16945
[ns] => 0
[title] => Gesellschaft mit beschränkter Haftung (Deutschland)
)

[2016] => Array
(
[pageid] => 2016
[ns] => 0
[title] => GmbH & Co. KG
)

In der URL war gut der kodierte Suchbegriff abzulesen, den wir in unserem folgenden Java-Beispiel frei parametrisieren wollen. Unser Programm soll Suchbegriffe als Parameter auf der Kommandozeile entgegennehmen, daraus eine korrekte Anfrage-URL formulieren und alle Suchergebnisse auf der Konsole ausgeben:

Listing 13.8com/tutego/insel/net/WikipediaSeeker.java, WikipediaSeeker

public class WikipediaSeeker {

public static void main( String[] args ) throws Exception {

String search = args.length > 0 ? String.join( "_", args ) : "Java (Programmiersprache)";
search = URLEncoder.encode( search, StandardCharsets.UTF_8.name() );
URL url = new URL( "http://de.wikipedia.org/w/api.php?action=query&generator=search& format=txt&gsrsearch=" + search );
// [title] => Java (Programmiersprache)
Pattern titlePattern = Pattern.compile( "\\s+\\[title\\] => (.*)" );
try ( Scanner scanner = new Scanner( url.openStream(),
StandardCharsets.UTF_8.name() ) ) {
while ( scanner.hasNextLine() ) {
Matcher matcher = titlePattern.matcher( scanner.nextLine() );
if ( matcher.matches() )
System.out.println( matcher.group(1) );
}
}
}
}

Der erste Teil des Programms kümmert sich um die Parameter, die alle zusammengehängt und dann vom URLEncoder in eine korrekte Form gebracht werden – falls kein Parameter vorhanden ist, sucht unser Programm nach »Java (Programmiersprache)«. Den kodierten Such-String hängen wir an die Basis-URL und öffnen eine Verbindung. Der Scanner läuft Zeile für Zeile durch das Ergebnis, doch interessieren uns nicht alle Zeilen, sondern nur die, die aussehen wie »[title] => «, denn sie enthalten unsere Suchergebnisse. Ein Pattern beschreibt genau das, was wir suchen, und wenn der Matcher einen Fund hat, gibt uns das Programm nur das Ergebnis rechts vom Pfeil aus.

 
Zum Seitenanfang

13.4.3POST-Request absenden Zur vorigen ÜberschriftZur nächsten Überschrift

Ein POST-Request überträgt die Parameter nicht in der URL, sondern setzt sie in einen Block, der zum Server übertragen wird. Gegenüber einem GET ändert sich einiges, was das folgende Beispiel (zu einem fiktiven Server) zusammenfasst:

Listing 13.9com/tutego/insel/net/PostRequest.java, main()

String body = "param1=" + URLEncoder.encode( "value1", "UTF-8" ) + "&" +
"param2=" + URLEncoder.encode( "value2", "UTF-8" );

URL url = new URL( "http://li.la.lu.lo/post/" );
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod( "POST" );
connection.setDoInput( true );
connection.setDoOutput( true );
connection.setUseCaches( false );
connection.setRequestProperty( "Content-Type",
"application/x-www-form-urlencoded" );
connection.setRequestProperty( "Content-Length", String.valueOf(body.length()) );

try ( Writer writer = new OutputStreamWriter( connection.getOutputStream() ) ) {
writer.write( body );
writer.flush();

try ( Scanner scanner = new Scanner( connection.getInputStream() ) ) {
while ( scanner.hasNextLine() )
System.out.println( scanner.nextLine() );
}
}

Der MIME-Typ »application/x-www-form-urlencoded« steht für ein Webformular, muss aber je nach Typ angepasst werden.

[+]Tipp

Für POST-Anfragen gibt es Open-Source-Bibliotheken, die die Serveranfrage vereinfachen. Mehr Informationen geben die Abschnitte Abschnitt 13.8, »Apache HttpComponents und Commons Net *«, und 15.2.10, »PUT/POST/DELETE-Sendungen mit der Jersey-Client-API absetzen«.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java SE 8 Standard-Bibliothek Java SE 8 Standard-Bibliothek
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel
Java ist auch eine Insel


Zum Rheinwerk-Shop: Professionell entwickeln mit Java EE 8
Professionell entwickeln mit Java EE 8


Zum Rheinwerk-Shop: Besser coden
Besser coden


Zum Rheinwerk-Shop: Entwurfsmuster
Entwurfsmuster


Zum Rheinwerk-Shop: IT-Projektmanagement
IT-Projektmanagement


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2018
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern