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. [转载]EF或LINQ 查询时使用IN并且根据列表自定义排序方法

    原文地址:EF或LINQ 查询时使用IN并且根据列表自定义排序方法作者:李明川 EF和LINQ改变了原有的手写SQL时期的一些编码方法,并且增强了各数据库之间的移植性简化了开发时的代码量和难度,由于很 ...

  2. JS创建一个数组1.求和 2.求平均值 3.最大值 4.最小值 5.数组逆序 6.数组去重 0.退出

    rs = require("readline-sync"); let arr = []; console.log("请输入数组的长度:"); let arr_l ...

  3. webapi+ajax跨域问题及cookie设置

    最近小玩了点东西,发现简单的东西总能遇到点问题 1.webapi跨域设置 [EnableCors(origins: "*", headers: "*", met ...

  4. margin的垂直方向塌陷

    标签(空格分隔): margin塌陷 margin垂直方向塌陷问题: 如下代码: <!DOCTYPE html> <html lang="en"> < ...

  5. pl/sql developer 问题总结

    问题1,出现NLS_LANG和字符集(Character set)问题 安装完PL/SQL后打开,遇到如图问题. 原因:这是因为系统没有设置NLS_LANG系统变量. 解决方法:有两种方式查看. 1. ...

  6. Smartforms

    Include text Populate indicator in program perform get_text using '0002' ls_detail-vbeln"Header ...

  7. route的简单使用

    route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] add : 添加一条路由规则del : 删除一条路由规则-net ...

  8. PyCharm中 Django1.11配置Mysql数据库

    1.Django 中配置MySQL数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名称 ...

  9. docker--centos镜像安装tomcat jdk1.8 mysql部署java web项目

    一.下载centos7标准镜像及安装mysql5.7 在centos安装mysql5.7 二.安装jdk 1.查询可用jdk版本 yum search java|grep jdk 2.根据搜索到的jd ...

  10. UVa156

    #include <bits/stdc++.h> using namespace std; map<string,int> cnt; vector<string> ...