SAP -> Web URL 호출 Program
FUNCTION z_gbfi_fmhttp.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(URL) TYPE STRING OPTIONAL
*" VALUE(PROXY_HOST) TYPE STRING OPTIONAL
*" VALUE(PROXY_PORT) TYPE STRING OPTIONAL
*" EXPORTING
*" REFERENCE(RETURN) TYPE STRING
*" REFERENCE(MESSAGE) TYPE STRING
*" REFERENCE(HTML) TYPE STRING
*" REFERENCE(PARSER) TYPE REF TO IF_IXML_PARSER
*" TABLES
*" IT_PARAM STRUCTURE ZGBFIS0001
*" EXCEPTIONS
*" PARAMETER_ERROR
*" ARGUMENT_NOT_FOUND
*" PLUGIN_NOT_ACTIVE
*" INTERNAL_ERROR
*" HTTP_COMMUNICATION_FAILURE
*" HTTP_INVALID_STATE
*" HTTP_PROCESSING_FAILED
*" HTTP_INVALID_TIMEOUT
*" NOTHING_RECEIVED
*" XML_PARSING_FAILED
*"----------------------------------------------------------------------
TYPE-POOLS: ixml.
CLASS cl_ixml DEFINITION LOAD.
DATA: http_client TYPE REF TO if_http_client.
DATA: result TYPE xstring,
ixml TYPE REF TO if_ixml,
doc TYPE REF TO if_ixml_document,
streamf TYPE REF TO if_ixml_stream_factory,
stream TYPE REF TO if_ixml_istream,
" parser TYPE REF TO if_ixml_parser,
items TYPE REF TO if_ixml_node_collection,
node TYPE REF TO if_ixml_node.
IF url IS INITIAL.
RAISE parameter_error.
ENDIF.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~request_method'
value = 'POST'.
CALL METHOD http_client->request->set_header_field
EXPORTING
name = '~server_protocol'
value = 'HTTP/1.1'.
CALL METHOD http_client->request->set_header_field
EXPORTING
name = 'content-type'
value = 'text/html; charset=UTF-8'.
DATA : it_tihttpnvp TYPE tihttpnvp,
wa_ihttpnvp TYPE ihttpnvp.
REFRESH it_tihttpnvp.
LOOP AT it_param.
CLEAR wa_ihttpnvp.
wa_ihttpnvp-name = it_param-name.
wa_ihttpnvp-value = it_param-value.
APPEND wa_ihttpnvp TO it_tihttpnvp.
ENDLOOP.
CALL METHOD http_client->request->if_http_entity~set_form_fields
EXPORTING
fields = it_tihttpnvp.
* Send the request
CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5.
CASE sy-subrc.
WHEN 1. RAISE http_communication_failure.
WHEN 2. RAISE http_invalid_state.
WHEN 3. RAISE http_processing_failed.
WHEN 4. RAISE http_invalid_timeout.
WHEN 5. RAISE others .
ENDCASE.
* Reterive the result
CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
CASE sy-subrc.
WHEN 1. RAISE http_communication_failure.
WHEN 2. RAISE http_invalid_state.
WHEN 3. RAISE http_processing_failed.
WHEN 4. RAISE others .
ENDCASE.
result = http_client->response->get_data( ).
html = http_client->response->get_cdata( ).
IF result IS INITIAL.
RAISE nothing_received.
ENDIF.
CALL METHOD http_client->close
EXCEPTIONS
http_invalid_state = 1.
IF sy-subrc EQ 1.
RAISE http_invalid_state.
ENDIF.
ENDFUNCTION.