Inhalt (Mit einem Webserver verbinden)

  1. Mit einem Webserver verbinden [4]

Mit HTTP auf eine URL zugreifen

Um auf einen Webserver zuzugreifen, ist es nötig, Mit Hilfe des Hypertext Transfer Protocols (HTTP) eine Verbindung zu einer URL aufzubauen.
Im Folgenden wird Schritt für Schritt erklärt, wie dies in Java zu bewerkstelligen ist.

Ein- und Ausgabe für eine Verbindung setzen

Zu Demonstrationszwecken soll verschaulicht werden, wie die Ausgabe von Daten auf die Netzwerkverbindung sowie das Einlesen von Daten von der Netzwerkverbindung bewerkstelligt werden kann.

Es soll eine XML-Datei auf die Netzwerkverbindung übertragen werden. Diese Datei wird zunächst mit einem BufferedReader eingelesen.

       // read our XML Document from File
       BufferedReader XMLFile = 
         new BufferedReader (new FileReader("callEbayRequest.xml"));

Für die Ausgabe von Daten auf die Netzwerkverbindung kann ein OutputStreamWriter verwendet werden. Dieser wird dann etwa Zeile für Zeile mit der Eingabedatei befüllt.

       // write our XML Dorcument to the output stream
       OutputStreamWriter out = new OutputStreamWriter(
          ebayConn.getOutputStream());
       String line="";
       while ((line = XMLFile.readLine())  != null){
       out.write(line);
       }
       out.close();

Das Einlesen von Daten aus einer Netzwerkverbindung erfolgt ähnlich. Es wird ein BufferedReader erzeugt und mit einem InputStreamReader der Netzwerkverbindung verbunden. Danach wird der Puffer zeilenweise ausgelesen und auf stdout ausgegeben.

       // get an InputStream that we can read from
       //InputStream myInSt = ebayConn.getInputStream();
       // for efficiency reasons, read in the InputStream with a BufferedReader
       BufferedReader inBuf = new BufferedReader(
             new InputStreamReader(
              ebayConn.getInputStream()));

       String inputLine;
       // print the answer on the command line
        while ((inputLine = inBuf.readLine()) != null)
           System.out.println(inputLine);
       inBuf.close();

Am Ende wird die Netzwerkverbindung wieder geschlossen.

       // disconnect at the end
       ebayConn.disconnect();

Fehlersuche bei Netzwerkverbindungen

Gesamtes Beispiel

Das gesamte Codebeispiel.
Hinweis: Der Code hat Beispielcharakter und stellt lediglich eine mögliche Lösung für die Aufgabenstellung dar.

import java.net.URLConnection;
import java.net.HttpURLConnection;
import java.net.URL;
import org.xml.sax.helpers.DefaultHandler;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.FileReader;
import java.net.UnknownHostException;

public class callEbay {
 
 
    public static void main(String args[]) throws Exception { 
     
       URL ebayAPIGatewayURL = new URL("http://open.api.ebay.com/shopping?"); 

       // open HTTP URL Connection
       HttpURLConnection ebayConn = (HttpURLConnection)ebayAPIGatewayURL.openConnection();
       
       // Setup Connection Parameters
       // -- we don't need User Interaction
       ebayConn.setAllowUserInteraction(false); 
       // -- we need Input and Output
       ebayConn.setDoInput(true); 
       ebayConn.setDoOutput(true); 
       
       // Setup request properties
       // -- set HTTP Request Method to POST
       ebayConn.setRequestMethod("POST");
       // -- set HTTP Header Fields for Request
       ebayConn.setRequestProperty("X-EBAY-API-REQUEST-ENCODING", "XML");
       ebayConn.setRequestProperty("X-EBAY-API-RESPONSE-ENCODING", "XML");
       ebayConn.setRequestProperty("X-EBAY-API-APP-ID", "PUT-YOUR-APP-ID-HERE");
       ebayConn.setRequestProperty("X-EBAY-API-CALL-NAME", "FindItems");
       ebayConn.setRequestProperty("X-EBAY-API-VERSION", "581");

       
       // after manipulating parameters that affect the connection 
       // to the remote resource, connect with it
       try {
        ebayConn.connect();
       } catch (UnknownHostException uhe) {
        System.out.println("Host not found, check your network connection!");
       }
       
       // get an OutputStream that we can write to
       //OutputStream myOutSt = ebayConn.getOutputStream();
      
       // read our XML Document from File
       BufferedReader XMLFile = 
         new BufferedReader (new FileReader("callEbayRequest.xml"));

       // write our XML Dorcument to the output stream
       OutputStreamWriter out = new OutputStreamWriter(
          ebayConn.getOutputStream());
       String line="";
       while ((line = XMLFile.readLine())  != null){
       out.write(line);
       }
       out.close();
       
       // get an InputStream that we can read from
       //InputStream myInSt = ebayConn.getInputStream();
       // for efficiency reasons, read in the InputStream with a BufferedReader
       BufferedReader inBuf = new BufferedReader(
             new InputStreamReader(
              ebayConn.getInputStream()));

       String inputLine;
       // print the answer on the command line
        while ((inputLine = inBuf.readLine()) != null)
           System.out.println(inputLine);
       inBuf.close();
       
       // disconnect at the end
       ebayConn.disconnect();
    }

} // end of class callEbay

class consumer extends DefaultHandler {
 
} // end of class consumer