ABAP调用HTTP服务

  • Post author:
  • Post category:其他


使用类if_http_client基本可以解决大多数ABAP调用http服务的问题。在调用服务前可以先用postman来测试服务,确定可输入的参数。

postman可以设置request的方法是get还是post,也可以设置body数据的格式。

在这里插入图片描述

在这里插入图片描述

以post方式为例,request的参数都是通过body来传输的。正常服务发起比较简单,通过if_http_client->request->set_data设置传输值,if_http_client->request->set_header_field设置header的content-type。如果服务端对body的数据字符集有要求,比如gbk,则需要先将body数据进行jbk转码,然后在if_http_client->request->set_content_type中设置content-type,示例代码如下:


  "设定传输请求内容格式以及编码格式
  lo_http_client->request->set_content_type( content_type = 'application/XML; charset=GBK' ).

  "设定调用服务
  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).

  CLEAR:lv_result_xstring.
  lv_result_xstring = cl_abap_codepage=>convert_to(
        source      =  uv_reqxml
        codepage    = 'GBK'
                          ).
  lv_len = xstrlen( lv_result_xstring ).
  lo_http_client->request->set_data(
     EXPORTING
       data   = lv_result_xstring
       offset = 0
       length = lv_len ).


  lo_http_client->send(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2 ).

  lo_http_client->receive(
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3 ).


*  lv_result_string = lo_http_client->response->get_cdata( ).

  CLEAR:lv_result_xstring,lv_result_string.
  lv_result_xstring = lo_http_client->response->get_data( ).
  lv_result_string  = cl_abap_codepage=>convert_from(
        source      =  lv_result_xstring
        codepage    = 'GBK' ).



版权声明:本文为Buffalo_soldier原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。