ABAP if_http_client

2020-09-01 23:27发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) 您好,我试图在abap中模拟此...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好,我试图在abap中模拟此python代码,但没有运气:

 def _convert_result(结果):#语法:无封面
     """将SOAP结果条目转换成字典。"""
     翻译= {
         'NOMBRE':'名称',
         'COMPROBANTE':'证明',
         'ES_VALIDO':'is_valid',
         'MENSAJE_VALIDACION':'validation_message',
         'RNC':'rnc',
         'NCF':'ncf',
         u'RNC/Cédula':'rnc',
         u'Nombre/RazónSocial':"名称",
         'Estado':'状态',
         'Tipo de comprobante':'type',
     }
     返回dict(
         (translation.get(键,键),值)
         对于键,值在result.items()中

 def check_dgii(rnc,ncf,timeout = 30):#编译指示:无遮盖
     """使用DGII在线Web服务验证RNC,NCF组合。

     这将使用DirecciónGeneral de运行的验证服务
     Impuestos Internos,多米尼加共和国税务部门进行检查
     RNC和NCF的组合是否有效。 超时到
     秒。

     返回具有以下结构的字典:

         {
             '名称':'注册名称',
             'status':'VIGENTE',
             'type':'FACTURAS DE CREDITO FISCAL',
             'rnc':'123456789',
             'ncf':'A020010210100000005',
             'validation_message':'El NCF digitado esválido。,
         }

     如果数字无效或未知,将返回None。"""
     汇入要求
     尝试:
         从bs4导入BeautifulSoup
     除了ImportError:
         从BeautifulSoup进口BeautifulSoup
   
    
     url ='https://www.dgii.gov.do/app/WebApps/ConsultasWeb/consultas/ncf.aspx'
     标头= {
         '用户代理':'Mozilla/5.0(python-stdnum)',
     }
     数据= {
         " __EVENTVALIDATION":"/img/wEWBAKh8pDuCgK + 9LSUBQLfnOXIDAKErv7SBhjZB34//pbvvJzrbkFCGGPRElcd",
         " __VIEWSTATE":"/img/wEPDwUJNTM1NDc0MDQ5ZGRCFUYoDcVRgzEntcKfSuvPnC2VhA ==",
         " ctl00 $ cphMain $ btnConsultar":"领事",
         " ctl00 $ cphMain $ txtNCF":ncf,
         " ctl00 $ cphMain $ txtRNC":rnc,
     }
     打印(数据)
     结果= BeautifulSoup(
         requests.post(URL,headers = headers,data = data,timeout = timeout).text)
     结果= result.find(id ='ctl00_cphMain_pResultado')
     如果结果:
         数据= {
             'validation_message':result.find(id ='ctl00_cphMain_lblInformacion')。get_text()。strip(),
         }
         data.update(zip(
             [在结果中x的x.get_text()。strip()。rstrip(':')。find_all('strong')],
             [x的x.get_text()。strip()在results.find_all('span')])中)
         返回_convert_result(数据)


 打印(check_dgii('102619883','B0100002500')


 

我尝试用不同的方式将正确的数据传递给请求,但没有外观,总是出现通信错误,但不知道到底是什么错误,这是我的abap代码(在此先感谢):



 *&------------------------------------------------  --------------------- *

 *&报告Z_ED_PROTO_HTTP_RESQ_PARSE

 *&

 *&------------------------------------------------  --------------------- *

 *&

 *&

 *&------------------------------------------------  --------------------- *



 报告z_ed_proto_http_resq_parse。

 DATA:lv_value TYPE字符串。



 数据:lo_http_client类型参考if_http_client。

 DATA:lv_url TYPE字符串。

 DATA:返回TYPE字符串。



 数据:lv_err_string TYPE字符串,

        lv_ret_code类型sy-subrc。

 DATA lv_payload TYPE字符串。

 数据lv_payload_x TYPE xstring。

 数据:rlength TYPE i。



 *构建网址



 lv_url ='https://www.dgii.gov.do/app/WebApps/ConsultasWeb/consultas/ncf.aspx'。





 *创建客户

 *调用方法cl_http_client => create_by_url

 *出口

 *网址= lv_url

 *导入

 *客户端= lo_http_client。

 调用方法cl_http_client => create

   出口

     主机= lv_url

 *服务=

 * proxy_host =

 * proxy_service =

     方案= 2

 * ssl_id =

 * sap_username =

 * sap_client =

   输入

     客户端= lo_http_client

   例外情况

     arguments_not_found = 1

     plugin_not_active = 2

     internal_error = 3

     其他= 4。

 如果sy-subrc <> 0。

 *消息ID sy-msgid类型sy-msgty编号sy-msgno

 *与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

 万一。







 *设定方法

 lo_http_client-> request-> set_method('POST')。

 lo_http_client-> request-> set_header_field(name ='〜request_method'

                                            值='POST')。

 *    内容类型

 lo_http_client-> request-> if_http_entity〜set_content_type(content_type ='text/html')。



 *设置相关

 * lo_http_CLIENT-> REQUEST-> IF_HTTP_ENTITY〜set_formfield_encoding(CL_HTTP_REQUEST => IF_HTTP_ENTITY〜CO_ENCODING_RAW)。



 *设置标题数据



 lo_http_client-> request-> set_header_field(

 出口

   名称="用户代理"

   值='Mozilla/5.0(python-stdnum)'

 )。



 *设置有效载荷



 类型:开始于ty_data,

        __EVENTVALIDATION类型的字符串,

        __VIEWSTATE TYPE字符串,

        ctl00 $ cphMain $ btnConsultar TYPE字符串,

        ctl00 $ cphMain $ txtNCF TYPE字符串,

        ctl00 $ cphMain $ txtRNC TYPE字符串,

   结束于ty_data。



 数据:ls_data类型ty_data,

       lt_data ty_data的类型标准表。





 CONCATENATE'{" __EVENTVALIDATION":"/img/wEWBAKh8pDuCgK + 9LSUBQLfnOXIDAKErv7SBhjZB34//pbvvJzrbkFCGGPRElcd",'

              '" __VIEWSTATE":"/img/wEPDwUJNTM1NDc0MDQ5ZGRCFUYoDcVRgzEntcKfSuvPnC2VhA ==",'

              '" ctl00 $ cphMain $ btnConsultar":"领事",'

              '" ctl00 $ cphMain $ txtNCF":" B0100012171",'

              '" ctl00 $ cphMain $ txtRNC":" 101064714​​"}'INTO lv_payload。



 ls_data -__ eventvalidation ='/wEWBAKh8pDuCgK + 9LSUBQLfnOXIDAKErv7SBhjZB34//pbvvJzrbkFCGGPRElcd'。

 ls_data -__ viewstate ='/wEPDwUJNTM1NDc0MDQ5ZGRCFUYoDcVRgzEntcKfSuvPnC2VhA =='。

 ls_data-ctl00 $ cphMain $ btnConsultar ='领事'。

 ls_data-ctl00 $ cphMain $ txtNCF ='B0100002500'。

 ls_data-ctl00 $ cphMain $ txtRNC ='102619883'。

 将ls_data附加到lt_data。

 清除ls_data。



 数据lcl_writer类型参考cl_sxml_string_writer。

 DATA l_string_json类型字符串。



 lcl_writer = cl_sxml_string_writer => create(if_sxml => co_xt_json)。

 * lcl_writer = cl_sxml_string_writer => create(if_sxml => co_xt_json)。

  呼叫转换ID源文本= lt_data结果XML lcl_writer。

  l_string_json = cl_abap_codepage => convert_from(lcl_writer-> get_output())。





 cl_demo_output => write_json(l_string_json)。



 用''''替换lv_payload中'"'的所有事件。



 通话功能'SCMS_STRING_TO_XSTRING'

   出口

     文字= lv_payload

 * MIMETYPE =''

 *编码=

   输入

     缓冲区= lv_payload_x

   例外情况

     失败= 1

     其他= 2。

 如果sy-subrc <> 0。

 *在这里实施适当的错误处理

 万一。

 BREAK-POINT。

 * rlength = strlen(l_xstring_json)



 lo_http_client-> request-> set_cdata(

   出口

     数据= lv_payload

 *偏移量= 0

 *长度= rlength

 )..





 *发送

 * BREAK-点。

 * lo_http_client-> request-> set_form_field(name ='__EVENTVALIDATION'value ='/wEWBAKh8pDuCgK + 9LSUBQLfnOXIDAKErv7SBhjZB34//pbvvJzrbkFCGGPRElcd')。

 * lo_http_client-> request-> set_form_field(name ='__VIEWSTATE'value ='/wEPDwUJNTM1NDc0MDQ5ZGRCFUYoDcVRgzEntcKfSuvPnC2VhA ==')。

 * lo_http_client-> request-> set_form_field(name ='ctl00 $ cphMain $ btnConsultar'value ='Consultar')。

 * lo_http_client-> request-> set_form_field(name ='ctl00 $ cphMain $ txtNCF'value ='B0100002500')。

 * lo_http_client-> request-> set_form_field(name ='ctl00 $ cphMain $ txtRNC'value ='102619883')。





 lo_http_client->发送(

 *出口

 *超时= CO_TIMEOUT_DEFAULT

   例外情况

     http_communication_failure = 1

     http_invalid_state = 2

     http_processing_failed = 3

     http_invalid_timeout = 4

     其他= 5

 )。

 如果sy-subrc <> 0。

 *消息ID sy-msgid类型sy-msgty编号sy-msgno

 *与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

   BREAK-POINT。

 万一。

 数据:lv_subrc类型sy-subrc。

 *接收

 lo_http_client-> receive(

   例外情况

     http_communication_failure = 1

     http_invalid_state = 2

     http_processing_failed = 3

     其他= 4

 )。

 如果sy-subrc <> 0。

   lv_subrc = sy-subrc。

   BREAK-POINT。

 *消息ID sy-msgid类型sy-msgty编号sy-msgno

 *与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

     lo_http_client-> get_last_error(导入代码= lv_subrc消息= lv_err_string)。

   lo_http_client->响应-> get_status(

     输入

       代码= lv_ret_code

       原因= lv_err_string

          )。

   消息lv_err_string类型'I'。

 其他。

   BREAK-POINT。

 万一。







 *现在我们有了response,parse,display

 * 你喜欢什么

 return = lo_http_client-> response-> get_cdata()。