点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,专家
在CSRF令牌的上下文中在ABAP报告中使用REST POST操作时遇到问题。
问题:在这里,我收到 403错误的请求, CSRF令牌验证失败。 ,即使我正在传递令牌和会话
,但其余客户端也可以使用。
这是报告代码
1)第一部分获得令牌
2)验证令牌
如何解决此问题
报告zcsrf_validation。 数据lo_client类型参考if_http_client。 数据lo_response类型参考if_rest_entity。 DATA lv_response TYPE字符串。 DATA lv_token TYPE字符串。 DATA lv_session TYPE字符串。 DATA lv_xcrf TYPE字符串。 DATA lv_http_status TYPE字符串。 DATA gc_content_type_form TYPE字符串VALUE'application/json; charset = utf-8'。 DATA gc_url TYPE字符串值'https://hana.xyz.net:8081/sap/ca/gef/arcgis/rest/services/EQ_A_E/featureserver/0/applyEdits'。 " ======================================================= ================== cl_http_client => create_by_url( 出口 网址= gc_url 输入 客户= lo_client 例外情况 其他= 4)。 lo_client-> request-> set_content_type(content_type = gc_content_type_form)。 lo_client-> request-> set_method(if_http_request => co_request_method_get)。 lo_client-> authenticate( 出口 client ='100'" R/3系统(登录时的客户端编号) username ='user'" ABAP系统,用户登录名 password ='password'"登录ID 语言= sy-langu)。 " SAP系统,当前语言 lo_client-> request-> set_header_field( 出口 name ='X-CSRF-Token'"标头字段的名称 value ='Fetch')。 lo_client->发送( 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 其他= 5)。 lo_client-> receive( 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 其他= 4)。 lv_token = lo_client-> response-> get_header_field('X-CSRF-Token')。 lv_session = lo_client-> response-> get_header_field('set-cookie')。 lo_client-> close()。 免费lo_client。 " =========================== CSRF令牌获取结束================= =================== " =========================带有Post request的验证CSRF令牌================== ======= cl_http_client => create_by_url( 出口 网址= gc_url 输入 客户= lo_client 例外情况 其他= 4)。 lo_client-> request-> set_content_type(content_type = gc_content_type_form)。 lo_client-> request-> set_method(if_http_request => co_request_method_post)。 lo_client-> authenticate( 出口 client ='100'" R/3系统(登录时的客户端编号) username ='user'" ABAP系统,用户登录名 password ='password'"登录ID 语言= sy-langu)。 lo_client-> request-> set_header_field( 出口 name ='X-CSRF-Token'"标头字段的名称 值= lv_token)。 lo_client-> request-> set_form_field( 出口 name ='Cookie'"表单字段名称 值= lv_session)。 lo_client->发送( 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 其他= 5 )。 lo_client-> receive( 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 其他= 4)。 lv_http_status = lo_client-> response-> get_header_field('〜status_code')。 lv_response = lo_client-> response-> get_header_field('〜status_reason')。 lv_xcrf = lo_client-> response-> get_header_field('x-csrf-token')。 WRITE:/'Satus:',lv_http_status。 WRITE:/'Response:',lv_response。 WRITE:/'CSRF-Token:',lv_xcrf。
嗨,哈里斯,
您可以尝试在客户端中启用Cookie接受吗?
GK
您好 Gaurav Karkara
非常感谢,它将起作用
我们需要添加lo_http_client-> PROPERTYTYPE_ACCEPT_COOKIE = if_http_client => co_enabled。 并且我们需要删除新的客户端创建。
这是工作代码
一周热门 更多>