Anfang des InhaltsbereichsDiese Grafik wird im zugehörigen Text erklärt Beispielprogramm Dokument im Navigationsbaum lokalisieren

Das folgende ABAP-Programm führt einen HTTP-Request aus. Der Request geht an sich selbst, der SAP Web Application Server kann ja sowohl Client als auch Server sein.

report HTTP_Test.

* data declarations

  data: client type ref to if_http_client.

Folgende Parameter müssen eingegeben werden. Wird nichts angegeben, werden Defaultwerte verwendet: Host (Defaultwert: der aktuelle Host), Service (Defaultwert: Port 80 für HTTP und 443 für HTTPS), Protokoll (Default HTTP/1.0), Pfad zu dem gewünschten Service, wie in Abschnitt Implementierung beschrieben (Default /sap/public/ping). Wird bei der Erzeugung des Client-Objekts die Verbindung über die Destination (SM59) benutzt, müssen diese Parameter in der Destination gepflegt werden.

data: host type string value = ‘host.wdf.sap-ag.de’,

      service type string value = ‘8080’,

      path type string value = '/sap/public/ping',

      errortext type string. "used for error handling

Nun wird das Objekt vom Typ CL_HTTP_CLIENT erzeugt (Schritt 1). Hier gibt es wie beschrieben 2 Möglichkeiten, die hier nebeneinander dargestellt sind.

Anschließend kann über das Objekt client auf alle Daten (Request, Response, Header-Felder, etc) zugegriffen werden.

Das Scheme bestimmt, ob HTTP oder HTTPS verwendet wird.

* create HTTP client object(s)

call method cl_http_client=>create

 exporting host  = host_str

   service     = service_str

proxy_host    = proxy_host

   proxy_service = proxy_service

   scheme        = scheme

 importing client  = client

exceptions

         argument_not_found = 1

         internal_error     = 2

         plugin_not_active  = 3

         others             = 4.

call method cl_http_client=>create_by_destination

  exporting destination = dest

  importing client      = client

exceptions

        destination_not_found    = 1

        internal_error           = 2

        argument_not_found       = 3

        destination_no_authority = 4

        plugin_not_active        = 5

        others                   = 6.

if sy-subrc <>0.

  write: / ‘Create failed, subrc = ', sy-subrc.

  exit.

endif.

Hier werden Header-Felder des Requests gesetzt. Das Setzen der HTTP-Request-Methode auf GET ist optional. (Wird dieses Feld nicht gesetzt, nimmt das System GET für den Fall, daß der HTTP-Request keinen Body enthält, ansonsten POST.) Das Setzen der Request-URI ist erforderlich, es sei denn, es wurde über die Destination (SM59) der gesamte Pfad als Pfad-Präfix angegeben. Hierzu verwenden Sie die Methode set_request_uri der Klasse cl_http_utility.

* set header fields

call method client->request->set_header_field

   exporting  name = '~request_method'

             value = 'GET'.

* Set request protocol

   if protocol = 'HTTP/1.0'.

      call method client->request->set_header_field

         exporting   name  = '~server_protocol'

                     value = 'HTTP/1.0'.

   else.

      call method client->request->set_header_field

         exporting   name  = '~server_protocol'

                     value = 'HTTP/1.1'.

   endif.

cl_http_utility=>set_request_uri( request = client->request

                                  uri = uri ).

Im Anschluss können beliebige Felder des Client-Kontrollblocks gefüllt werden (Schritt 2).

Sie können auch verlangen, dass für das Versenden der Antwort mit dem gzip-Verfahren komprimiert wird:

* should server send its response in gzip, if possible

    if cl_http_client=>c_compression_supported =

       if_http_client=>co_enabled.

          call method client->request->set_header_field

          exporting name  = 'accept-encoding'

                    value = 'gzip'.

       endif.

    endif.

Weitere Optionen

Nun wird der Request versendet (Schritt 3).

* Send

call method client->send

  exporting  timeout = timeout

  exceptions http_communication_failure  = 1

             http_invalid_state          = 2

             http_processing_failed      = 3

             others                      = 4.

if sy-subrc <> 0.

  call method client->get_last_error

     importing code    = subrc

               message = errortext.

  write: / 'communication_error( send )',

         / 'code: ', subrc, 'message: ', dummy.

  exit.

endif.

Hier muß wieder mit client->get_last_error der letzte Fehler abgefragt werden.

Nun wird die Antwort empfangen, die Responsedaten in das Client-Objekt gefüllt (Schritt 7).

* receive

call method client->receive

    exceptions http_communication_failure  = 1

               http_invalid_state          = 2

               http_processing_failed      = 3

               others                      = 4.

  if sy-subrc <> 0.

     call method client->get_last_error

     importing code    = subrc

               message = errortext.

    write: / 'communication_error( receive )',

           / 'code: ', subrc, 'message: ', dummy.

    exit.

  endif.

Auch hier müssen wieder Exceptions und Fehlerabfragen eingefügt werden.

Wenn die Verbindung nicht mehr verwendet wird, muß man wie folgt sowohl das Client-Objekt als auch die Verbindung abbauen:

* close

call method client->close

  exceptions http_invalid_state   = 1

             others               = 2.

Um den erfolgreichen Test zu dokumentieren, wird nun die Ausgaberoutine aufgerufen.

* output

  perform write_document.

Achtung

Der obige ABAP-Code soll nur ein einfaches Beispiel darstellen, es handelt sich nicht um eine Vorlage zum professionellen Arbeiten.

 

 

Ende des Inhaltsbereichs