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. |

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