ABAP CL_HTTP_CLIENT REST JSON问题

2020-09-05 05:34发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们需要从使用JSON的ABAP...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们需要从使用JSON的ABAP连接到外部HTTPS REST服务。


我们正在通过SAPGui(而不是Eclipse)使用直接ABAP,而且我们还没有使用7.4,因此我不能使用新的标准SAP JSON类。


我下载并安装了ZJSON内容,但是我很难找到清晰的示例来描述应如何使用它。


到目前为止,我正在调用CL_HTTP_CLIENT类CREATE_BY_DESTINATION方法来使用基本身份验证打开与外部服务的连接。 根据我们需要调用的特定函数,他们为我们提供了具有各种方法子路径的基本URL。


我的麻烦点一直在尝试在需要传递参数的地方调用它们的API方法,但是在使用ABAP CL_HTTP_CLIENT类的HTTP/REST/JSON语法上遇到了麻烦。

我正在调用CL_HTTP_CLIENT-> REQUEST-> SET_HEADER_FIELD来设置标头值:

'〜server_protocol'='HTTP/1.1'

'Accept'='application/json'

'Content-Type'='application/json; charset = utf-8'

我正在调用CL_HTTP_CLIENT-> REQUEST-> SET_METHOD将请求方法设置为" POST"

我还要调用CL_HTTP_UTILITY => SET_REQUEST_URI来设置完整的方法路径(在基本URL之后),包括我们需要使用的特定方法。

我尝试将所需的方法参数设置为表单字段,但我认为他们需要将其设置为JSON格式。

作为测试,我对他们的期望进行了硬编码,并称为CL_HTTP_CLIENT-> REQUEST-> SET_CDATA,但是他们的服务器返回了非常长的HTML页面,而不是用JSON语法包装的预期返回参数。

我在正确的轨道上吗? 是CL_HTTP_CLIENT-> REQUEST-> SET_CDATA(或SET_DATA)方法将指定的内容放入HTTP REST"有效负载"中还是应该做其他事情?

非常感谢您能提供的任何帮助。

布莱恩

2条回答
暮风yp
2020-09-05 06:00

嗨,Brian,

感谢您对下一期的评论。
我有一个适用于Chrome的下一个网址: https://junjitest.mineduc.cl/api-doc-parv/v1/docente/35605/rut/17878912?apikey=SpfBRV2HHyxAyaWcorai777RubbFGpYg

我已经修改了您的代码,如您所见:

 cl_http_client => create_by_url(
  出口
  url ='https://junjitest.mineduc.cl/api-doc-parv/v1/docente/35605/rut/17878912?apikey=SpfBRV2HHyxAyaWcorai777RubbFGpYg'
  输入
  客户端= lo_http_client
  例外情况
  arguments_not_found = 1
  plugin_not_active = 2
  internal_error = 3
  其他= 4)。
如果sy-subrc <> 0。 返回。 ENDIF。
*我更改了使用GET方法的逻辑: lo_http_client-> request-> set_method('GET')。 lo_http_client-> request-> set_content_type('application/json')。
*发送请求 lo_http_client->发送( 例外情况 http_communication_failure = 1 http_invalid_state = 2)。
*收到回复 lo_http_client-> receive( 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3)。
*检查响应。 希望您能返回JSON响应。 DATA lv_response TYPE字符串。
lv_response = lo_http_client-> response-> get_cdata()。

响应是:

<!DOCTYPE HTML PUBLIC"-//IETF//DTD HTML 2.0//EN"># # 404未找到# < 正文>#

未找到

#

在此服务器上找不到请求的URL/api-doc-parv/v1/docente/35605/rut/17878912。

#
#<地址> Apache/2.2.15


我将不胜感激。

此致

JoséJaimes

一周热门 更多>