使用类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 版权协议,转载请附上原文出处链接和本声明。