ABAP调用API,body使用x-www-form-urlencoded入参示例。
*&---------------------------------------------------------------------* *& Report ZUPD_ESB_TOKEN *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZUPD_ESB_TOKEN. DATA OREF TYPE REF TO CX_ROOT. DATA:E_MSG TYPE STRING, E_CODE TYPE CHAR1, E_DATA TYPE STRING, E_HTTP_STATUS_CODE TYPE I. TRY . DATA LV_URL TYPE STRING . "根据配置信息,获取URL接口地址 SELECT SINGLE ZZURL INTO LV_URL FROM ZTPAKESBURL WHERE ZZURLID = 'GET_ESB_TOKEN' AND ZZCLIENT = SY-MANDT. IF SY-SUBRC NE 0. WRITE '连接地址获取失败!'. RETURN. ENDIF. "获取账号密码 DATA:LV_USERNAME TYPE STRING, LV_PASSWORD TYPE STRING. SELECT SINGLE ZZURL,ZREMARKS FROM ZTPAKESBURL WHERE ZZURLID = 'ESB_U_P' AND ZZCLIENT = @SY-MANDT INTO ( @LV_USERNAME,@LV_PASSWORD ). IF SY-SUBRC NE 0. WRITE '账号密码获取失败!'. RETURN. ENDIF. DATA: LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT. "实例化1个 IF_HTTP_CLIENT 的对象得到HTTP_CLIENT CL_HTTP_CLIENT=>CREATE_BY_URL( EXPORTING URL = LV_URL "输入参数 IMPORTING CLIENT = LO_HTTP_CLIENT ). LO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = LO_HTTP_CLIENT->CO_DISABLED. "设置某个特定的header field的值 LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = '~SERVER_PROTOCOL' VALUE = 'HTTP/1.1'). "设置某个特定的header field的值 LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'CONTENT-TYPE' VALUE = 'application/x-www-form-urlencoded; charset=utf-8' ). "设置某个特定的header field的值 LO_HTTP_CLIENT->REQUEST->SET_HEADER_FIELD( NAME = 'ACCEPT' VALUE = '*/*' ). "设置http请求的方法GET 或者 POST,默认使用POST LO_HTTP_CLIENT->REQUEST->SET_METHOD( 'POST' ). *设置入参 LO_HTTP_CLIENT->REQUEST->SET_FORM_FIELD( NAME = 'userName' VALUE = LV_USERNAME ). LO_HTTP_CLIENT->REQUEST->SET_FORM_FIELD( NAME = 'password' VALUE = LV_PASSWORD ). "发送数据 CALL METHOD LO_HTTP_CLIENT->SEND EXCEPTIONS HTTP_COMMUNICATION_FAILURE = 1 HTTP_INVALID_STATE = 2. "接收HTTP返回 CALL METHOD LO_HTTP_CLIENT->RECEIVE EXCEPTIONS HTTP_COMMUNICATION_FAILURE = 1 HTTP_INVALID_STATE = 2 HTTP_PROCESSING_FAILED = 3. "返回状态校验 LO_HTTP_CLIENT->RESPONSE->GET_STATUS( IMPORTING CODE = E_HTTP_STATUS_CODE ). CASE E_HTTP_STATUS_CODE. WHEN 200. "返回数据,"获取response中的http的body内容 E_DATA = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ). WHEN OTHERS. E_CODE = 'E'. E_MSG = '接口访问失败,返回码:' && E_HTTP_STATUS_CODE . ENDCASE. "关闭http链接 CALL METHOD LO_HTTP_CLIENT->CLOSE. CATCH CX_ROOT INTO OREF. E_CODE = 'E'. E_MSG = OREF->IF_MESSAGE~GET_TEXT( ). "关闭http链接 IF LO_HTTP_CLIENT IS NOT INITIAL. CALL METHOD LO_HTTP_CLIENT->CLOSE. ENDIF. ENDTRY. *业务状态识别 IF E_CODE IS INITIAL. *JSON数据转为内表数据 TYPES : BEGIN OF TY_JSON, IDENTITYTOKEN TYPE STRING, USERID TYPE STRING, STATE TYPE BOOLE_D, USERNAME TYPE STRING, END OF TY_JSON. DATA:WA_JSON TYPE TY_JSON. CALL METHOD /UI2/CL_JSON=>DESERIALIZE EXPORTING JSON = E_DATA * PRETTY_NAME = ABAP_FALSE CHANGING DATA = WA_JSON. IF WA_JSON-STATE EQ ABAP_TRUE. DATA WA_ZTPAKESBURL TYPE ZTPAKESBURL. WA_ZTPAKESBURL-ZZURLID = 'ESB_TOKEN'. WA_ZTPAKESBURL-ZZCLIENT = SY-MANDT. WA_ZTPAKESBURL-ZZURL = WA_JSON-IDENTITYTOKEN. WA_ZTPAKESBURL-ZREMARKS = '更新时间' && SY-DATUM && SY-UZEIT. MODIFY ZTPAKESBURL FROM WA_ZTPAKESBURL. IF SY-SUBRC EQ 0. COMMIT WORK AND WAIT. E_MSG = 'TOKEN更新成功!当前时间:' && SY-DATUM && SY-UZEIT. ELSE. ROLLBACK WORK. E_MSG = 'TOKEN更新失败!当前时间:' && SY-DATUM && SY-UZEIT. ENDIF. ELSE. E_MSG = E_DATA. ENDIF. ENDIF. WRITE E_MSG.
网友评论