jjzjj

ABAP:调用HTTP接口详解

放弃幻想_ 2024-07-12 原文

DATA:pv_http_client TYPE REF TO if_http_client,
pv_url TYPE string.

1.可以通过URL连接或者IP:端口连接,根据实际情况而定,
建议使用URL,省去地址服务器域名转换

"URL接连
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = pv_url
IMPORTING
client = pv_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

"IP地址链接
CALL METHOD cl_http_client=>create
EXPORTING
host = p_host "IP
service = p_port "端口

  •   SCHEME  = '1'
    
  •   PROXY_HOST    = ''
    
  •   PROXY_SERVICE = ''
    IMPORTING
      client  = pv_http_client.
    

    CHECK pv_http_client IS NOT INITIAL.

    pv_http_client->propertytype_logon_popup = pv_http_client->co_disabled.

"HTTP - > header

CALL METHOD pv_http_client->request->set_header_field
EXPORTING
name = ‘~request_method’
value = ‘POST’.

CALL METHOD pv_http_client->request->set_header_field
EXPORTING
name = ‘~server_protocol’
value = ‘HTTP/1.1’.

"HTTP -> 密码

CALL METHOD pv_http_client->authenticate
  EXPORTING
    "  PROXY_AUTHENTICATION = 'X'
    username = gv_account    "用户名
    password = gv_password."密码

"数据创建及验证

CALL METHOD pv_http_client->request->set_header_field
EXPORTING
name = ‘Content-Type’
value = ‘application/x-www-form-urlencoded’."变量根据实际情况调整

CALL METHOD pv_http_client->request->set_form_field
EXPORTING
name = ‘sip_appkey’
value = ‘www.baidu.com’.

CALL METHOD pv_http_client->request->set_form_field
EXPORTING
name = ‘sip_timestamp’
value = lv_sip_timestamp.

CALL FUNCTION ‘ZFM_GET_MD5’
EXPORTING
iv_string = lv_password
IMPORTING
ev_md5 = lv_password_md5.

lv_md5_all = ‘nea@burgeon.com.cn’ && lv_sip_timestamp && lv_password_md5.

“https://blog.csdn.net/FQHX_116/article/details/126255335?spm=1001.2014.3001.5502 详解MD5加密
CALL FUNCTION ‘ZFM_GET_MD5’”
EXPORTING
iv_string = lv_md5_all
IMPORTING
ev_md5 = lv_md5_all.

CALL METHOD pv_http_client->request->set_form_field
EXPORTING
name = ‘sip_sign’
value = lv_md5_all.

CALL METHOD pv_http_client->request->set_form_field
EXPORTING
name = ‘transactions’
value = pv_datastr.


"JSON传输
CALL METHOD gv_http_client->request->set_header_field
EXPORTING
name = ‘Content-Type’
value = ‘application/json’.

"数据转JSON格式
CALL METHOD cl_fdt_json=>data_to_json
EXPORTING
ia_data = et_data
RECEIVING
rv_json = ev_datastr.

"发送JSON

CALL METHOD gv_http_client->request->set_header_field
EXPORTING
name = ‘~request_uri’
value = gv_url.

"获取JSON长度->也可以不设置
gv_len = strlen( gv_datastr ).

CALL METHOD gv_http_client->request->set_cdata
EXPORTING
data = gv_datastr
offset = 0
length = gv_len.

"数据发送HTTP接口
"发送请求
pv_http_client->send( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2 ).

IF sy-subrc <> 0.
"操作失败,获取失败原因
pv_http_client->get_last_error( IMPORTING message = pv_resultmsg ).

ELSE.
"读取远程服务返回的处理过结果。
pv_http_client->receive( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ).
IF sy-subrc <> 0 .
pv_http_client->get_last_error( IMPORTING message = pv_resultmsg ).
ELSE.
"读取返回返回内容
pv_resultmsg = pv_http_client->response->get_cdata( ).
"获取HTTP返回值
pv_http_client->response->get_status( IMPORTING code = pv_status ).
ENDIF.

ENDIF.

"解析返回JSON
TRY.
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = pv_resultmsg
CHANGING
data = lt_ztdsoms_return.

  CATCH cx_sy_move_cast_error.

ENDTRY.

"关闭HTTP链接----重要必须要关闭,不然或导致HTTP请求过多倒是系统DUMP
IF pv_http_client IS NOT INITIAL.
CALL METHOD pv_http_client->close.
ENDIF.

"获取JAVA时间戳----如果需要可以使用
CONVERT DATE sy-datlo TIME sy-timlo
INTO TIME STAMP time TIME ZONE sy-zonlo.
lv_tstmp1 = time.
lv_tstmp2 = ‘19700101000000’.
TRY.
CALL METHOD cl_abap_tstmp=>subtract
EXPORTING
tstmp1 = lv_tstmp1
tstmp2 = lv_tstmp2
RECEIVING
r_secs = lv_secs.
CATCH cx_parameter_invalid_range .
CATCH cx_parameter_invalid_type .
ENDTRY.

lc_secs = lv_secs.

CONDENSE lc_secs NO-GAPS.

有关ABAP:调用HTTP接口详解的更多相关文章

  1. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  2. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  4. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  5. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  6. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  9. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  10. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

随机推荐