首页 > 其他分享 >ABAP 调用外部WEBAPI

ABAP 调用外部WEBAPI

时间:2024-04-29 13:23:53浏览次数:26  
标签:WEBAPI 调用 HTTP ABAP CLIENT ls TYPE METHOD kv

ABAP代码如下,仅在内部测试通过,未涉及外部网络WEBAPI及跨域调用。

*&---------------------------------------------------------------------*
*& Report  ZYC_WEBAPI
*&Restful api 测试
REPORT ZYC_WEBAPI.
DATA: LEN         TYPE        I, "发送报文长度
      LEN_STRING  TYPE        STRING,
      URL         TYPE        STRING, "接口地址
      HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT, "http客户端
      POST_STRING TYPE        STRING,
      RESULT      TYPE        STRING.
DATA: IT_HEADER  TYPE TIHTTPNVP.
DATA:
  serializer TYPE REF TO cl_trex_json_serializer,
  lv_json     TYPE string.
DATA: BEGIN OF ls_kv,
        username  TYPE string,
        password TYPE string,
      END OF ls_kv.
DATA:LT_KV LIKE TABLE OF LS_KV.
"LS_KV-username = 'IGKg8elR/1tnTbdVEz92mtV0IwTn7JIYXlFZaoGZv+pQryfg3fJM/ggjAt3s3hqZKakqRe+ULj7Mmu2rhgSxvnK2YM8PQaQqTo
"/urogMBaFEKnalLfWDdIGrE/F9yaaFT3cWP1f/HL6T70PuhJhr4/h4/QH7fiO5+Y+13JOBxMQ='. "ls_kv-password = 'Y57KClQ9AcDEQPgjBIshNFbrFd03dlzdbUn7kLyJ4tTjoRDuqAZ2Zj6mbX505bw+uO0148OQrGOWEnlYEAgM+gbs244UagqXn3NkH
"/y8v3NW6J0ZkoiZBd1JwHLf/AA33fD4aUjkd7JTZaZw3a5a4Dgpbyk6x3iJzSQKGSlaL9I='. *--------------------------------------------------------------------* url = 'http://10.0.31.154/WebApi/api/values/'. ls_kv-username = 'Tom'. ls_kv-password = 'pwd'. CREATE OBJECT serializer EXPORTING data = ls_kv. *--------------------------------------------------------------------* *url = 'http://10.0.31.154/WebApi/api/sap/'. *ls_kv-username = 'Tom'. *ls_kv-password = 'pwd'. *APPEND ls_kv TO LT_KV. *ls_kv-username = 'Tom1'. *ls_kv-password = 'pwd1'. *APPEND ls_kv TO LT_KV. *CREATE OBJECT serializer * EXPORTING * data = LT_KV. *--------------------------------------------------------------------* serializer->serialize( ). lv_json = serializer->get_data( ). START-OF-SELECTION. "创建http客户端 CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL EXPORTING URL = URL IMPORTING CLIENT = HTTP_CLIENT EXCEPTIONS ARGUMENT_NOT_FOUND = 1 PLUGIN_NOT_ACTIVE = 2 INTERNAL_ERROR = 3 OTHERS = 4. "设定传输请求内容格式以及编码格式 HTTP_CLIENT->REQUEST->SET_CONTENT_TYPE( CONTENT_TYPE = 'application/json; charset=utf-8' ). "设置http method 为Post "HTTP_CLIENT->REQUEST->SET_METHOD( IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST ). "HTTP_CLIENT->REQUEST->SET_METHOD( IF_HTTP_REQUEST=>CO_REQUEST_METHOD_GET ). "IF_HTTP_ENTITY~CO_REQUEST_METHOD_GET * "设置待传输内容长度 LEN = STRLEN( lv_json ). "设置调用方法 * CALL METHOD HTTP_CLIENT->REQUEST->SET_header_FIELD * EXPORTING * NAME = 'sign' * VALUE = 'nL4P52yTnkiT7pV5ZxpA0t4/d8iD02/SrWrXJM4Cktk='. "设置传入字符串 CALL METHOD HTTP_CLIENT->REQUEST->SET_METHOD( 'POST' ). CALL METHOD HTTP_CLIENT->REQUEST->SET_CDATA EXPORTING DATA = lv_json OFFSET = 0 LENGTH = LEN. "发送 CALL METHOD HTTP_CLIENT->SEND EXCEPTIONS HTTP_COMMUNICATION_FAILURE = 1 HTTP_INVALID_STATE = 2 HTTP_PROCESSING_FAILED = 3 HTTP_INVALID_TIMEOUT = 4 OTHERS = 5. "接收 CALL METHOD HTTP_CLIENT->RECEIVE EXCEPTIONS HTTP_COMMUNICATION_FAILURE = 1 HTTP_INVALID_STATE = 2 HTTP_PROCESSING_FAILED = 3. IF sy-subrc = 0. ENDIF. "提取返回字符串 RESULT = HTTP_CLIENT->RESPONSE->GET_CDATA( ). "将字符串中的回车符替换,否则abap将会识别为# REPLACE ALL OCCURRENCES OF REGEX '\n' IN RESULT WITH ''. "获取接口返回的数据 * RESULT = HTTP_CLIENT->RESPONSE->GET_CDATA( ). WRITE: RESULT.

 

标签:WEBAPI,调用,HTTP,ABAP,CLIENT,ls,TYPE,METHOD,kv
From: https://www.cnblogs.com/kang2008/p/18165453

相关文章

  • webapi动态创建后台任务(使用排队的后台任务)
    很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应。这时候就可以使用排队的后台任务。基本原理是用一个队列保存任务委托,然后用一个后台定时任务依次执行队列中的委托。MSD......
  • WEBAPI传参及默认首页设置
    开发工具:VS2017创建WEBAPI,1.选择ASP.NETCoreWeb应用程序2.选择如下,HTTPS配置勾选去掉,暂不配置3.“属性”中调试默认界面及launchsettings.json 4.调试以后默认页面 5. ......
  • 远程服务调用使用客户端凭据登录
    1、不使用当前上下文token 2、需要表示调用的客户端哪个一个客户端"RemoteServices":{"SystemBillNoManagement":{"BaseUrl":"http://192.168.1.50:50025/","UseCurrentAccessToken":"false","IdentityClient&......
  • 微服务调用form-data 流文件异常
    Noserializerfoundforclassjava.io.FileDescriptorandnopropertiesdiscoveredtocreateBeanSerializer(toavoidexception,disableSerializationFeature.FAIL_ON_EMPTY_BEANS)(throughreferencechain:com.cloud.module.smartkey.dto.UploadParam["upl......
  • Windows平台NASM汇编与C混合调用
    Windows平台NASM汇编与C混合调用tonyblackwhite之前介绍了Windows平台下,用微软宏汇编MASM与C混合调用的方法。MASM是微软独有的,Linux没法用,我喜欢学一个能够应用于两种平台的,所以还是更钟情于开源的可跨平台的NASM汇编。tonyblackwhite:Win平台最简单的方式实现C程序调用汇编函......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——优化RPC调用,缓解频繁请求
    远程过程调用RPC——优化RPC调用,缓解频繁请求导致的GC压力 在Go语言的高并发和微服务架构中,远程过程调用(RPC)是一种常用的通信机制。然而,当频繁发送RPC请求时,不断创建Request和Response结构体可能会带来额外的垃圾收集(GC)压力,进而影响应用的性能和响应时间。为了减......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——客户端处理RPC请求的原理
    远程过程调用RPC——客户端处理RPC请求的原理及源代码分析 客户端无论是同步调用还是异步调用,每次RPC请求都会生成一个Call对象,并使用seq作为key保存在map中,服务端返回响应值时再根据响应值中的seq从map中取出Call,进行相应处理。 客户端发起RPC调用的过程大致如下所示,我们......
  • Go的Gin框架中使用Cgo调用Python的CApi调用Python代码
    在Gin项目中定义Services用以唤起Python,值得注意的是需要在引入Python.h前使用#cgo声明依赖库packagecpython//#cgoCFLAGS:-I"Q:/Sill-/anaconda/envs/poetry/include"//#cgoLDFLAGS:-L"Q:/Sill-/anaconda/envs/poetry/libs"-lpython311//#include<Python.h>imp......
  • go调用langchain
    openai版本设置环境变量OPENAI_API_KEYpackagemainimport("context""fmt""log""github.com/tmc/langchaingo/llms""github.com/tmc/langchaingo/llms/openai")funcmain(){ctx:=context.Backgroun......
  • RPC(远程过程调用)详解
    一、RPC是什么RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。二、RPC需要解决的问题1、CallID映射我们怎么告诉远程机器我们要调用f......