abap 调用http 发送 json 测试函数

SE11创建结构:zsmlscpnotice

SE37创建函数:zqb_test_http_fuc1

FUNCTION zqb_test_http_fuc1.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
  DATA: json_ser TYPE REF TO cl_trex_json_serializer,
        json_des TYPE REF TO cl_trex_json_deserializer.

DATA: lv_url TYPE string."http 服务接口地址
  DATA: lo_http_client  TYPE REF TO if_http_client.

DATA: lv_len TYPE i."发送报文长度
  DATA: lv_respon TYPE string.
  DATA: lv_subrc TYPE sy-subrc.
  DATA: lv_json_str TYPE string. "发送报文
  DATA: lv_msgty TYPE c,
        lv_msgtx TYPE string.

DATA: lt_json TYPE STANDARD TABLE OF zsmlscpnotice,
        ls_json TYPE zsmlscpnotice.

* 设置HTTP接口地址
  lv_url = 'http://ip:端口/服务'.

* 设置报文内容(json格式字符串)
  ls_json-functionname = 'XXXXXX'.
  ls_json-bcpcode = '20170214000000'.
  ls_json-status = 'S'.
  ls_json-msg = '请调用接口抓取数据'.
  ls_json-result = ''.
  APPEND ls_json TO lt_json.

* 内表->JSON
  CREATE OBJECT json_ser
    EXPORTING
      data = lt_json[].
  CALL METHOD json_ser->serialize.
  CALL METHOD json_ser->get_data
    RECEIVING
      rval = lv_json_str.

"创建客户端请求
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = lv_url
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.
  IF sy-subrc <> 0.
    "lv_subrc = sy-subrc.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
               sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.

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

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

"设置待传输内容
  lv_len = strlen( lv_json_str ).
  CALL METHOD lo_http_client->request->set_cdata
    EXPORTING
      data   = lv_json_str
      offset = 0
      length = lv_len.

"发送请求
  lo_http_client->send(  EXCEPTIONS http_communication_failure = 1
                                    http_invalid_state         = 2 ).

IF sy-subrc <> 0.
    "操作失败,获取失败原因
    "lv_subrc = sy-subrc.
    lo_http_client->get_last_error( IMPORTING message = lv_msgtx ).
    lv_msgty = 'E'.
    EXIT.
  ENDIF.

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

IF sy-subrc <> 0 .
    "lv_subrc = sy-subrc.
    lo_http_client->get_last_error( IMPORTING message = lv_msgtx ).
    lv_msgty = 'E'.
    EXIT.
  ELSE.
    "读取返回返回内容
    CLEAR lv_respon.
    lv_respon = lo_http_client->response->get_cdata( ).
  ENDIF.
ENDFUNCTION.

ABAP接口之Http发送json报文的更多相关文章

  1. Java 用HTTP的方式发送JSON报文请求

    前言: 项目调用第三方接口时,通常是用socket或者http的通讯方式发送请求:http 为短连接,客户端发送请求都需要服务器端回送响应,请求结束后,主动释放链接.Socket为长连接:通常情况下S ...

  2. 使用LR编写HTTP协议Json报文格式接口脚本实战

    最近在做HTTP协议接口压测时,遇到一些编写脚本方面的问题,在这里总结记录下,以便以后温习,也希望能帮助到和我有同样困惑的朋友吧. //实战代码如下所示:Action() { lr_start_tra ...

  3. python通过http请求发送soap报文进行webservice接口调用

    最近学习Python调用webservice 接口,开始的时候主要采用suds 的方式生产client调用,后来发现公司的短信接口采用的是soap报文来调用的,然后开始了谷歌,最后采用httplib ...

  4. python使用requests发送application/json报文数据

    def client_post_jsondata_requests(request_url,requestJSONdata): #功能说明:发送json请求报文到指定的地址并获取请求响应报文 #输入参 ...

  5. 【Java】接口开发中关于接受和发送json的相关范例

    接受json package com.suneee.scn.wms.web.rocketmq; import java.util.List; import net.sf.json.JSONArray; ...

  6. HttpClient发送Json数据到指定接口

    项目中遇到将Json数据发送到指定接口,于是结合网上利用HttpClient进行发送. /** * post发送json数据 * @param url * @param param * @return ...

  7. Jmeter 发送json{Jfinal 接口req rsp均为json}

    链接地址:http://yangyoupeng-cn-fujitsu-com.iteye.com/blog/2013649 使用jmeter发送json数据.方法有三种 原创,转载请注明出处 1.利用 ...

  8. ABAP-HTTP发送JSON

    1. HTTP发送JSON格式数据: function zap_01_url_sap_to_c3 . *"------------------------------------------ ...

  9. PHP如何通过Http Post请求发送Json对象数据?

    因项目的需要,PHP调用第三方 Java/.Net 写好的 Restful Api,其中有些接口,需要 在发送 POST 请求时,传入对象. Http中传输对象,最好的表现形式莫过于JSON字符串了, ...

随机推荐

  1. Post提交带参网址

    前端 $(function(){ var obj=$('#form1'); obj.validate({ submitHandler: function (form){ var data={}; da ...

  2. java命令--jstat 工具使用

    jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具.他可以显示本地或远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据, ...

  3. python day07笔记总结

    2019.4.4 S21  day07笔记总结 一.深浅拷贝 1.copy.copy()     浅拷贝 deep.copy()    深拷贝 2.一般情况 1.str/int/bool 是不可变类型 ...

  4. fair scheduler配置

    <property>    <name>yarn.resourcemanager.scheduler.class</name>    <value>or ...

  5. VS 提示对象被多次指定;已忽略多余的指定

    最近有一个工程编译老是出现这个问题,网上的解决方案说是工程目录下有同名的源文件,所以编译出了同名的obj.然而我检查了一下并没有.经尝试,把所有文件从项目中移除再重新添加进来就行了..应该是因为我反复 ...

  6. Babel插件:@babel/plugin-transform-runtime

    一 概述 每个Babel编译后的脚本文件,都以导入的方式使用Babel的帮助函数,而不是每个文件都复制一份帮助函数的代码. 1 优点 (1)提高代码重用性,缩小编译后的代码体积. (2)防止污染全局作 ...

  7. jdbc导致的问题

    遇到的问题:利用eclipse编写web project,Tomcat服务器成功开启,也通过build path导入了jdbc的路径,但是还是出现下面问题 连接数据库代码如下: 连接数据库语句没有问题 ...

  8. Winform文本框只能输入限定的文本

    比如WInform中的文本框只能输入数字活着字母和退格键,e.kaychar(按下键盘的值)

  9. Day2数据结构和算法

    2019-02-28,10:23:52 算法效率的度量方法 事后统计方法:为每一个程序编制测试程序 ,比较时间.(很麻烦,没有普遍适用性) 事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行 ...

  10. node.js的Promise库-bluebird示例

    前两天公司一哥们写了一段node.js代码发给我,后面特意提了一句“写的不太优雅”.我知道,他意思是回调嵌套回调,因为当时比较急也就没有再纠结.然而内心中总记得要解决这个问题.解决node.js的回调 ...