아빠별/ABAP

SAP -> Web URL 호출 Program

성민스타 2009. 10. 14. 09:53
반응형

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.

반응형