将Cookie添加到http请求

2020-09-21 17:17发布

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

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


大家好,

我需要执行一个添加特定cookie的http请求。 除cookie部分外,一切正常。 似乎Cookie并未根据我从服务器获得的响应发送。

这是创建http客户端的代码段:

调用方法cl_http_client => create_by_url导出
url ='url'

导入客户端= http_client

例外
arguments_not_found = 1
plugin_not_active = 2
internal_error = 3OTHERS = 4。

我已经使用了几段代码来添加cookie,但不幸的是没有成功:

http_client-> request-> set_cookie(name ='JSESSIONID'

value = l_session_id)。


调用方法http_client-> request-> set_cookie EXPORTING
name ='JSESSIONID'value =

l_session_id。


数据:l_cookie_value TYPE字符串。

CONCATENATE'JSESSIONID ='l_session_id INTO
l_cookie_value。

调用方法http_client-> request-> set_header_field导出
name ='Cookie'值= l_cookie_value。

任何想法我的代码有什么问题吗?

此致

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

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


大家好,

我需要执行一个添加特定cookie的http请求。 除cookie部分外,一切正常。 似乎Cookie并未根据我从服务器获得的响应发送。

这是创建http客户端的代码段:

调用方法cl_http_client => create_by_url导出
url ='url'

导入客户端= http_client

例外
arguments_not_found = 1
plugin_not_active = 2
internal_error = 3OTHERS = 4。

我已经使用了几段代码来添加cookie,但不幸的是没有成功:

http_client-> request-> set_cookie(name ='JSESSIONID'

value = l_session_id)。


调用方法http_client-> request-> set_cookie EXPORTING
name ='JSESSIONID'value =

l_session_id。


数据:l_cookie_value TYPE字符串。

CONCATENATE'JSESSIONID ='l_session_id INTO
l_cookie_value。

调用方法http_client-> request-> set_header_field导出
name ='Cookie'值= l_cookie_value。

任何想法我的代码有什么问题吗?

此致

付费偷看设置
发送
3条回答
能不能别闹
1楼-- · 2020-09-21 17:57

我假设您正在对POST/PATCH之类的东西进行API调用。 如果是这种情况,那么首先您将需要获取XSRF令牌以及它的cookie,使用该对象进行进一步的POST/PATCH调用。请在下面找到来自用于修补程序请求的API集线器

数据:lo_http_client类型参考if_http_client。
 DATA:响应TYPE字符串。


 "通过URL创建HTTP客户端
 " API沙箱的API端点
 呼叫方法cl_http_client => create_by_url
   出口
     url ='https://sandbox.api.sap.com/workflow-service/rest/v1/task-instances/{taskInstanceId}'


   输入
     客户端= lo_http_client
   例外情况
     arguments_not_found = 1
     plugin_not_active = 2
     internal_error = 3
     其他= 4。


 "可用的API端点
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .ap1.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .br1.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .ca1.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .cn1.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .eu3.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .hanatrial.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .jp1.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .ru1.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .us1.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .us2.hana.ondemand.com/workflow-service/rest
 " https://bpmworkflowruntime {provideraccountname}-{consumeraccountname} .us3.hana.ondemand.com/workflow-service/rest


 如果sy-subrc <> 0。
   "错误处理
 万一。


 "设置请求方法
 lo_http_client-> request-> set_method('PATCH')。


 "添加标题
 lo_http_client-> request-> set_header_field(name ='X-CSRF-Token'value ='string')。
 lo_http_client-> request-> set_header_field(name ='Content-Type'value ='application/json')。
 lo_http_client-> request-> set_header_field(name ='Accept'value ='application/json')。
 " API沙箱的API密钥
 lo_http_client-> request-> set_header_field(name ='APIKey'value ='')。




 "用于生产性API端点的可用安全方案
 "基本身份验证,OAuth 2.0


 "基本身份验证:在授权标头中以Base64提供用户名:密码
 " lo_http_client-> request-> set_header_field(名称='授权'值='基本')。


 呼叫方法lo_http_client-> request-> set_cdata
   出口
     data ='{" context":{}," status":" COMPLETED"," subject":" string"," description":" string"," recipientUsers":" string"," recipientGroups":" string"  ,"处理器":"字符串","到期日期":" 2018-04-13T12:22:35.793Z","优先级":" VERY_HIGH"}'。


 呼叫方法lo_http_client->发送
   例外情况
     http_communication_failure = 1
     http_invalid_state = 2
     http_processing_failed = 3
     http_invalid_timeout = 4
     其他= 5。


 如果sy-subrc = 0。
   调用方法lo_http_client-> receive
     例外情况
       http_communication_failure = 1
       http_invalid_state = 2
       http_processing_failed = 3
       其他= 5。
 万一。


 如果sy-subrc <> 0。
   "错误处理
 万一。


 响应= lo_http_client->响应-> get_cdata()。


 写:"响应:",响应。
 
风早神人
2楼-- · 2020-09-21 17:39

请在粘贴Cookie的位置粘贴完整的代码,然后传回

compass1988
3楼-- · 2020-09-21 17:50

大家好,

我的问题现在已经解决。 原来,cookie名称的字符为""。 而SAP正在编码/替换"。" 字符"%2e"。 结果,服务器无法理解cookie名称。

为避免编码,只需应用SAP NOTE 1160362来设置参数" ict/disable_cookie_urlencoding = 1"。

此致

一周热门 更多>