SAP-ABAP-调用HTTP接口请求FUNCTION

本文介绍了一种在SAP ABAP环境中封装HTTP接口的方法,通过创建一个Function Module简化了对外部HTTP服务的调用过程。该方法允许用户仅需提供报文及接口地址即可轻松获取响应消息。

为了方便方便调用http类型的接口,我将其进行了封装,只需传入报文及接口地址即可得到接口返回消息,具体如何新建function如下图所示,代码说明可详细看我这篇文章SAP-ABAP-如何用WEBAPI的方式调用外部接口。下面的截图是function的参数

 

 

FUNCTION zrfc_call_http_request .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IP_URL) TYPE  STRING OPTIONAL
*"     VALUE(IP_BODY) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(V_SUBRC) TYPE  CHAR1
*"     VALUE(V_MESSAGE) TYPE  BAPI_MSG
*"     VALUE(V_RESPON) TYPE  STRING
*"     VALUE(V_XRESPON) TYPE  XSTRING
*"----------------------------------------------------------------------
  DATA lv_message TYPE string.

  CLEAR:lv_message,v_subrc,v_message,v_respon.

  DATA http_client  TYPE REF TO if_http_client.
  "创建客户端请求
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = ip_url
    IMPORTING
      client             = http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.
  IF sy-subrc <> 0.
    http_client->get_last_error( IMPORTING message = lv_message ).
    v_message = lv_message.
    v_subrc = 'E'.
    MESSAGE '创建http连接失败!' TYPE 'S' DISPLAY LIKE 'W'.
    RETURN.
  ENDIF.

  http_client->propertytype_logon_popup = http_client->co_disabled.

  "设定调用服务
  CALL METHOD http_client->request->set_method
    EXPORTING
      method = 'POST'.

  "设定传输请求内容格式以及编码格式

  CALL METHOD http_client->request->if_http_entity~set_content_type
    EXPORTING
      content_type = 'application/x-www-form-urlencoded'.

*  CALL METHOD http_client->request->set_header_field
*    EXPORTING
*      name  = 'Content-Type'
*      value = 'application/JSON;charset=utf-8'.



  IF ip_body IS NOT INITIAL.
    CALL METHOD http_client->request->set_cdata
      EXPORTING
        data   = ip_body
        offset = 0
        length = strlen( ip_body ).
  ENDIF.

  "发送请求
  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.

  IF sy-subrc <> 0.
    http_client->get_last_error( IMPORTING message = lv_message ).
    v_message = lv_message.
    v_subrc = 'E'.
    MESSAGE '发送请求失败!' TYPE 'S' DISPLAY LIKE 'W'.
    RETURN.
  ENDIF.

  "读取远程服务返回的处理过结果。
  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.

  IF sy-subrc <> 0 .
    http_client->get_last_error( IMPORTING message = lv_message ).
    v_message = lv_message.
    v_subrc = 'E'.
    MESSAGE '获取返回消息失败!' TYPE 'S' DISPLAY LIKE 'W'.
    RETURN.
  ELSE.
    "读取返回返回内容
    v_subrc = 'S'.
    v_message = '调用接口成功!'.
    v_respon = http_client->response->get_cdata( ).
    v_xrespon = http_client->response->get_data( ).
  ENDIF.


ENDFUNCTION.

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值