cl_http_client无法使用换行符设置标题

2020-09-05 11:31发布

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

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


我必须发送带有标头的http请求,该标头包含换行符(具体来说为 )。 (这是允许的,请参见 https://tools.ietf.org/html/rfc2616#section -2.2

如果我创建一个字符串(iv_mystring_with_cr_lf)并包含`cl_abap_char_utilities => cr_lf`并将该字符串作为值传递给`lo_http_client-> request-> set_header_field(name ='HeaderName'value = iv_mystring_with_cr_lf)',我会收到。 一个http_communication_failure错误,我们将调用lr_http_client-> send()。 如果我删除cr_lf字符,则一切正常,除了我的标题错误...

我错过了什么吗? 有什么解决方法吗? 不幸的是,我必须使用 发送标头。

这是一个转储的最小示例。

数据:
          lo_http_client类型参考if_http_client,
          lv_somestring类型的字符串,
          lv_url类型的字符串。

   lv_url ='http://example.org'。

   cl_http_client => create_by_url(
       出口
         网址= lv_url
         ssl_id ='DFAULT'
       输入
         客户= lo_http_client)。

   lv_somestring ='测试'。
   将lv_somestring cl_abap_char_utilities => cr_lf lv_somestring合并为lv_somestring。

   lo_http_client-> request-> set_header_field(name ='someHeader'value = lv_somestring)。

   lo_http_client-> send()。  "崩溃。

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

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


我必须发送带有标头的http请求,该标头包含换行符(具体来说为 )。 (这是允许的,请参见 https://tools.ietf.org/html/rfc2616#section -2.2

如果我创建一个字符串(iv_mystring_with_cr_lf)并包含`cl_abap_char_utilities => cr_lf`并将该字符串作为值传递给`lo_http_client-> request-> set_header_field(name ='HeaderName'value = iv_mystring_with_cr_lf)',我会收到。 一个http_communication_failure错误,我们将调用lr_http_client-> send()。 如果我删除cr_lf字符,则一切正常,除了我的标题错误...

我错过了什么吗? 有什么解决方法吗? 不幸的是,我必须使用 发送标头。

这是一个转储的最小示例。

数据:
          lo_http_client类型参考if_http_client,
          lv_somestring类型的字符串,
          lv_url类型的字符串。

   lv_url ='http://example.org'。

   cl_http_client => create_by_url(
       出口
         网址= lv_url
         ssl_id ='DFAULT'
       输入
         客户= lo_http_client)。

   lv_somestring ='测试'。
   将lv_somestring cl_abap_char_utilities => cr_lf lv_somestring合并为lv_somestring。

   lo_http_client-> request-> set_header_field(name ='someHeader'value = lv_somestring)。

   lo_http_client-> send()。  "崩溃。
付费偷看设置
发送
4条回答
SKY徐
1楼-- · 2020-09-05 12:31
如果
风早神人
2楼-- · 2020-09-05 12:19
 HTTP/1.1标头字段值可以折叠成多行,
    续行以空格或水平制表符开头。 全线性
    包括折叠在内的空白具有与SP相同的语义。 一个
    接收者可以在之前用单个SP替换任何线性空格
    解释字段值或向下游转发消息。

        LWS = [CRLF] 1 *(SP | HT)

从我的角度来看,HTTP方法并不聪明,它会检查CRLF的标题字段以添加空格或水平制表符,如何决定哪个分隔符是最好的。

如Sandra所述,应修改串联以满足HTTP 1.1要求。

将lv_somestring cl_abap_char_utilities => cr_lf配置为lv_somestringold。
 和
 将lv_somestringold和lv_somestringnew合并为lv_somestring,并用空格分隔。

此功能仅适用于HTTP 1.1 ...,但是SAP的HTTP类默认使用1.0,因此您无法更改它。 (对德文截图表示敬意)

致谢

Holger

Nir深蓝
3楼-- · 2020-09-05 12:19

关于HTTP版本1.0和1.1的注释,您是否尝试过设置以下版本:

 lo_http_client-> request-> set_version(if_http_request => co_protocol_version_1_1)。
Cikesha
4楼-- · 2020-09-05 12:15

按照您的建议更新HTTP协议版本不能解决问题。

我想我必须联系SAP支持。

一周热门 更多>