如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版

简介: 如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版

正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大部分,分别进行介绍。本文是本教程的文章目录。



作者简介

Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达 15 年的 SAP 标准产品开发生涯里,Jerry 曾经先后参与 SAP Business ByDesign, SAP CRM, SAP Cloud for Customer, SAP S/4HANA, SAP Commerce Cloud(电商云)等标准产品的研发工作。


Jerry 对 SAP OData 服务的开发,测试,发布,部署,测试,及基于各种不同 SAP 技术实现的 OData 服务的幕后技术实现细节和使用场合,均有着深入的研究。



基于 SEGW - Gateway Service Builder 的开发教程



  • 更多文章正在写作中,敬请期待

使用 Restful ABAP Programming 编程模型(简称 RAP) 开发 OData 服务


  • 正在写作中,敬请期待


使用 SAP Cloud Application Programming 编程模型开发 OData 服务


  • 正在写作中,敬请期待


本教程的前一步骤,我们使用 ABAP 代码,消费了我们自己开发的 OData 服务。


访问的 url 如下:


https://{{host}}:{{port}}/sap/opu/odata/sap/ZBOOK_MANAGE_SRV/BookSet(guid'42010aee-2a94-1edd-8494-c9d14e91555e')


这个 url 因为是简单的 HTTP GET 进行的读取操作,所以消费的时候,不需要在 HTTP 请求的头部字段里,传递 CSRF token 值。


本步骤我们继续学习一个复杂一点的场景,我们期望用 ABAP 代码触发一个 OData 服务的修改操作,使用的 HTTP 请求类型为 PUT. 因为涉及到业务数据的修改操作,所以 OData 服务协议规定,在提交这个修改操作时,HTTP 请求的头部字段,需要包含一个名叫 x-csrf-token 的字段,值为从 ABAP 服务器请求的 CSRF token 值。





关于这个数据修改的更多操作,参考本教程之前的步骤:



简单地说,我们在 ABAP 代码里,需要实现的步骤,和我们在 Postman 里的操作完全一致。


首先使用 ABAP 代码,获取 CSRF token.


完整代码参考这篇文章。


请求 CSRF token 的代码,同前一步骤通过 ABAP 代码调用 OData 服务的读取操作相比,一个区别就是,我们需要在 HTTP 请求的头部字段里,增加一个名叫 x-csrf-token 的字段,值为 fetch.




这样,我们可以利用 get_header_field 方法,从 HTTP 响应头部字段里,获取名叫 x-csrf-token 字段的值,也就是服务器返回的 CSRF token,如下图调试器里所示。


紧接着进入程序的第二部分,新建第二个 if_http_client 实例,调用该实例向服务器发送第二个 HTTP PUT 请求,同时使用刚刚从服务器端获得的 CSRF token,作为 HTTP 头部字段 x-csrf-token 的值。


第二部分的代码如下。


两部分编写完毕,执行报表,在最后一行,从服务器得到的响应,居然是 CSRF token validation failed:



这就让人很费解了,为什么我们将第一个 HTTP 请求,从服务器获取的 CSRF token,立即传递给了 第二个 HTTP 请求的头部字段,为什么仍然遇到 CSRF token 验证失败的错误消息呢?


问题分析及解决方案在这里

相关文章
|
1月前
|
Java C#
ABAP 7.40 新语法介绍系列之三 - ABAP Value 操作符试读版
ABAP 7.40 新语法介绍系列之三 - ABAP Value 操作符试读版
23 0
|
1月前
|
数据库
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
20 0
|
19天前
|
存储
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
19 0
|
23天前
|
数据库 存储 BI
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
12 0
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
|
23天前
|
数据库
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
10 0
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
|
1月前
|
SQL Java 数据库
ABAP 7.40 新语法介绍系列之四 - ABAP Table Expression 内表表达式的用法试读版
ABAP 7.40 新语法介绍系列之四 - ABAP Table Expression 内表表达式的用法试读版
18 0
|
1月前
ABAP 7.40 新语法介绍系列之一 - ABAP 变量内联声明(Inline Declaration)试读版
ABAP 7.40 新语法介绍系列之一 - ABAP 变量内联声明(Inline Declaration)试读版
27 0
|
1月前
SAP ABAP ALV 的分组显示和 Subtotal 显示实现的技术步骤试读版
SAP ABAP ALV 的分组显示和 Subtotal 显示实现的技术步骤试读版
33 0
|
1月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
15 0
|
1月前
|
BI 数据库
SAP ABAP ALV 报表单击某列后执行某段 ABAP 逻辑的实现方式 - hotspot 行为实现试读版
SAP ABAP ALV 报表单击某列后执行某段 ABAP 逻辑的实现方式 - hotspot 行为实现试读版
26 0

热门文章

最新文章