Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | CLASS zcl_abapgit_http_agent DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_http_agent .
CLASS-METHODS create
RETURNING
VALUE(ri_instance) TYPE REF TO zif_abapgit_http_agent .
METHODS constructor.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mo_global_headers TYPE REF TO zcl_abapgit_string_map.
CLASS-METHODS attach_payload
IMPORTING
ii_request TYPE REF TO if_http_request
iv_payload TYPE any
RAISING
zcx_abapgit_exception.
ENDCLASS.
CLASS ZCL_ABAPGIT_HTTP_AGENT IMPLEMENTATION.
METHOD attach_payload.
DATA lo_type TYPE REF TO cl_abap_typedescr.
lo_type = cl_abap_typedescr=>describe_by_data( iv_payload ).
IF lo_type->type_kind = cl_abap_typedescr=>typekind_xstring.
ii_request->set_data( iv_payload ).
ELSEIF lo_type->type_kind = cl_abap_typedescr=>typekind_string.
ii_request->set_cdata( iv_payload ).
ELSE.
zcx_abapgit_exception=>raise( |Unexpected payload type { lo_type->absolute_name }| ).
ENDIF.
ENDMETHOD.
METHOD constructor.
CREATE OBJECT mo_global_headers.
ENDMETHOD.
METHOD create.
CREATE OBJECT ri_instance TYPE zcl_abapgit_http_agent.
ENDMETHOD.
METHOD zif_abapgit_http_agent~global_headers.
ro_global_headers = mo_global_headers.
ENDMETHOD.
METHOD zif_abapgit_http_agent~request.
DATA li_client TYPE REF TO if_http_client.
DATA lo_proxy_configuration TYPE REF TO zcl_abapgit_proxy_config.
DATA lv_code TYPE i.
DATA lv_message TYPE string.
FIELD-SYMBOLS <ls_entry> LIKE LINE OF io_query->mt_entries.
CREATE OBJECT lo_proxy_configuration.
cl_http_client=>create_by_url(
EXPORTING
url = iv_url
ssl_id = zcl_abapgit_exit=>get_instance( )->get_ssl_id( )
proxy_host = lo_proxy_configuration->get_proxy_url( iv_url )
proxy_service = lo_proxy_configuration->get_proxy_port( iv_url )
IMPORTING
client = li_client ).
li_client->request->set_version( if_http_request=>co_protocol_version_1_1 ).
li_client->request->set_method( iv_method ).
IF io_query IS BOUND.
LOOP AT io_query->mt_entries ASSIGNING <ls_entry>.
li_client->request->set_form_field(
name = <ls_entry>-k
value = <ls_entry>-v ).
ENDLOOP.
ENDIF.
LOOP AT mo_global_headers->mt_entries ASSIGNING <ls_entry>.
li_client->request->set_header_field(
name = to_lower( <ls_entry>-k )
value = <ls_entry>-v ).
ENDLOOP.
IF io_headers IS BOUND.
LOOP AT io_headers->mt_entries ASSIGNING <ls_entry>.
li_client->request->set_header_field(
name = to_lower( <ls_entry>-k )
value = <ls_entry>-v ).
ENDLOOP.
ENDIF.
IF iv_method = zif_abapgit_http_agent=>c_methods-post
OR iv_method = zif_abapgit_http_agent=>c_methods-put
OR iv_method = zif_abapgit_http_agent=>c_methods-patch.
attach_payload(
ii_request = li_client->request
iv_payload = iv_payload ).
ENDIF.
li_client->send(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5 ).
IF sy-subrc = 0.
li_client->receive(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4 ).
ENDIF.
IF sy-subrc <> 0.
li_client->get_last_error(
IMPORTING
code = lv_code
message = lv_message ).
zcx_abapgit_exception=>raise( |HTTP error: [{ lv_code }] { lv_message }| ).
ENDIF.
ri_response = lcl_http_response=>create( li_client ).
ENDMETHOD.
ENDCLASS.
|