cl_http_client FOR 404'请求的资源不可用'

2020-09-24 01:35发布

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

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


大家好,这是一个非常奇怪的问题。 我正在通过fm cl_http_client (REST)与第三个系统建立连接。URL需要3个参数: useID,username,email ,并且我会在借口成功后发送电子邮件

但是现在,这是一个非常非常奇怪的问题!!!!一些用户名可以成功发送电子邮件,但其他用户名将返回" 404'请求的资源不可用'" 像这样,(仅用户名没有什么不同,用户名或其他参数没有限制!!!! )

那么,有人知道是什么原因吗?感谢前进!

成功:

错误:

代码:

 SPAN {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S31 {
 字体样式:斜体;
 颜色:#808080;
 }
 .L0S32 {
 颜色:#3399FF;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 表格GET_DATA_FROM_URL使用P_L_URL

                                  P_I_PERNR

                         更改P_O_TYPE

                                  P_O_MESSAGE

                                  。



   数据:http_client TYPE REF IF_HTTP_CLIENT,

        gv_cdata TYPE字符串。

   数据:loc_conv类型参考cl_abap_conv_in_ce,

         l_xstr TYPE xstring,

         l_str TYPE字符串,

         l_result TYPE字符串。



   "返回数据

   DATA:L_CODE TYPE C,"返回码

        L_MESSAGE TYPE STRING,

        L_DATA TYPE STRING,

        L_SCORE TYPE STRING,

        L_PASS TYPE STRING,

        L_STRING_TEMP TYPE STRING,

        L_STRING_TEMP1 TYPE STRING

        。

   数据:L_LENGTH I型。

   DATA:L_LOOP_INDEX TYPE I,"循环Deinx

        l_INDEX_TEMP TYPEI。"索引和

   数据:L_TABIX类型SY-TABIX。



   DATA:L_LINE_MESSAGE TYPE I,"味精的索引

        L_LINE_CODE TYPE I," CODE的索引

        L_LINE_PASS TYPE STRING," PASS的索引

        L_LINE_SCORE TYPEI。" SCORE的索引



   呼叫方法cl_http_client => create_by_url

     出口

       网址= P_L_URL

     输入

       客户端= http_client

     例外情况

       arguments_not_found = 1

       plugin_not_active = 2

       internal_error = 3

       其他= 4。



 **将请求方法设置为GET或POST

   http_client-> request-> set_method(if_http_request => co_request_method_post)。



 *呼叫方法http_client-> request-> set_header_field

 *出口

 *名称="内容"

 *值="测试"。

 *呼叫方法http_client-> request-> set_header_field

 *出口

 *名称="目标"

 *值='18961701938'。

 *

 *呼叫方法http_client-> request-> set_header_field

 *出口

 *名称="内容类型"

 ** value ='application/json'。  "

 * value ='text/html; charset = utf-8'。  " utf-8





   呼叫方法http_client-> SEND

     例外情况

       http_communication_failure = 1

       http_invalid_state = 2。

   呼叫方法http_client-> receive

     例外情况

       http_communication_failure = 1

       http_invalid_state = 2

       http_processing_failed = 3。

   清除l_result。



   l_xstr = http_client-> response-> get_data()。



   如果sy-subrc = 0。

     http_client-> close()。

   万一。



   呼叫方法cl_abap_conv_in_ce =>建立

     出口

       输入= l_xstr

       编码='UTF-8'

       替换='?'

       ignore_cerr = abap_true

     接收

       转换= loc_conv。



   尝试。

       调用方法loc_conv-> read

         输入

           数据= l_str。

     捕获cx_sy_conversion_codepage。

     捕获cx_sy_codepage_converter_init。

     捕获cx_parameter_invalid_type。

     捕获cx_parameter_invalid_range。

   ENDTRY。



   用空格替换l_str中正则表达式'\ {*'的所有出现。

   用''替换l_str中所有正则表达式'\} *'的出现。

   用''替换l_str中正则表达式'\ [*'的所有出现。

   用''替换l_str中所有正则表达式'\] *'的出现。

   用l替换l_str中所有正则表达式'\" *'的出现。



   将l_str AT','拆分到表数据(LT_RESULT_TEMP)中。



   描述表LT_RESULT_TEMP LINES DATA(L_LINE)。

   L_LINE_CODE = 1。

   L_LINE_MESSAGE = 2。





   "码

   读取表LT_RESULT_TEMP到数据(LS_RESULT_TEMP)索引L_LINE_CODE。

   如果SY-SUBRC EQ 0。

     分割LS_RESULT_TEMP AT':'INTO L_STRING_TEMP P_O_TYPE。

   万一。



   "信息

   读取表LT_RESULT_TEMP INTO LS_RESULT_TEMP INDEX L_LINE_MESSAGE。

   如果SY-SUBRC EQ 0。

     将LS_RESULT_TEMP AT分割为':'INTO L_STRING_TEMP P_O_MESSAGE。

   万一。





 ENDFORM。

(14.8 kB)

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

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


大家好,这是一个非常奇怪的问题。 我正在通过fm cl_http_client (REST)与第三个系统建立连接。URL需要3个参数: useID,username,email ,并且我会在借口成功后发送电子邮件

但是现在,这是一个非常非常奇怪的问题!!!!一些用户名可以成功发送电子邮件,但其他用户名将返回" 404'请求的资源不可用'" 像这样,(仅用户名没有什么不同,用户名或其他参数没有限制!!!! )

那么,有人知道是什么原因吗?感谢前进!

成功:

错误:

代码:

 SPAN {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S31 {
 字体样式:斜体;
 颜色:#808080;
 }
 .L0S32 {
 颜色:#3399FF;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 表格GET_DATA_FROM_URL使用P_L_URL

                                  P_I_PERNR

                         更改P_O_TYPE

                                  P_O_MESSAGE

                                  。



   数据:http_client TYPE REF IF_HTTP_CLIENT,

        gv_cdata TYPE字符串。

   数据:loc_conv类型参考cl_abap_conv_in_ce,

         l_xstr TYPE xstring,

         l_str TYPE字符串,

         l_result TYPE字符串。



   "返回数据

   DATA:L_CODE TYPE C,"返回码

        L_MESSAGE TYPE STRING,

        L_DATA TYPE STRING,

        L_SCORE TYPE STRING,

        L_PASS TYPE STRING,

        L_STRING_TEMP TYPE STRING,

        L_STRING_TEMP1 TYPE STRING

        。

   数据:L_LENGTH I型。

   DATA:L_LOOP_INDEX TYPE I,"循环Deinx

        l_INDEX_TEMP TYPEI。"索引和

   数据:L_TABIX类型SY-TABIX。



   DATA:L_LINE_MESSAGE TYPE I,"味精的索引

        L_LINE_CODE TYPE I," CODE的索引

        L_LINE_PASS TYPE STRING," PASS的索引

        L_LINE_SCORE TYPEI。" SCORE的索引



   呼叫方法cl_http_client => create_by_url

     出口

       网址= P_L_URL

     输入

       客户端= http_client

     例外情况

       arguments_not_found = 1

       plugin_not_active = 2

       internal_error = 3

       其他= 4。



 **将请求方法设置为GET或POST

   http_client-> request-> set_method(if_http_request => co_request_method_post)。



 *呼叫方法http_client-> request-> set_header_field

 *出口

 *名称="内容"

 *值="测试"。

 *呼叫方法http_client-> request-> set_header_field

 *出口

 *名称="目标"

 *值='18961701938'。

 *

 *呼叫方法http_client-> request-> set_header_field

 *出口

 *名称="内容类型"

 ** value ='application/json'。  "

 * value ='text/html; charset = utf-8'。  " utf-8





   呼叫方法http_client-> SEND

     例外情况

       http_communication_failure = 1

       http_invalid_state = 2。

   呼叫方法http_client-> receive

     例外情况

       http_communication_failure = 1

       http_invalid_state = 2

       http_processing_failed = 3。

   清除l_result。



   l_xstr = http_client-> response-> get_data()。



   如果sy-subrc = 0。

     http_client-> close()。

   万一。



   呼叫方法cl_abap_conv_in_ce =>建立

     出口

       输入= l_xstr

       编码='UTF-8'

       替换='?'

       ignore_cerr = abap_true

     接收

       转换= loc_conv。



   尝试。

       调用方法loc_conv-> read

         输入

           数据= l_str。

     捕获cx_sy_conversion_codepage。

     捕获cx_sy_codepage_converter_init。

     捕获cx_parameter_invalid_type。

     捕获cx_parameter_invalid_range。

   ENDTRY。



   用空格替换l_str中正则表达式'\ {*'的所有出现。

   用''替换l_str中所有正则表达式'\} *'的出现。

   用''替换l_str中正则表达式'\ [*'的所有出现。

   用''替换l_str中所有正则表达式'\] *'的出现。

   用l替换l_str中所有正则表达式'\" *'的出现。



   将l_str AT','拆分到表数据(LT_RESULT_TEMP)中。



   描述表LT_RESULT_TEMP LINES DATA(L_LINE)。

   L_LINE_CODE = 1。

   L_LINE_MESSAGE = 2。





   "码

   读取表LT_RESULT_TEMP到数据(LS_RESULT_TEMP)索引L_LINE_CODE。

   如果SY-SUBRC EQ 0。

     分割LS_RESULT_TEMP AT':'INTO L_STRING_TEMP P_O_TYPE。

   万一。



   "信息

   读取表LT_RESULT_TEMP INTO LS_RESULT_TEMP INDEX L_LINE_MESSAGE。

   如果SY-SUBRC EQ 0。

     将LS_RESULT_TEMP AT分割为':'INTO L_STRING_TEMP P_O_MESSAGE。

   万一。





 ENDFORM。

(14.8 kB)
付费偷看设置
发送
4条回答
bbpeas
1楼-- · 2020-09-24 01:59

我发现了为什么!原因是因为编码!我的系统是HANA 1511 unicode。当我使用cl_http_client => create_by_url连接第三系统时,用户名是中文,它在unicode和非unicode中有所不同 对于 chinese.so 我收到错误消息!

打个大熊猫
2楼-- · 2020-09-24 01:59

请重新格式化您的 代码,其中包含CSS代码+每行之间有一个空白行。 我发现您的网络浏览器存在一个常见问题,因此请先将代码粘贴到记事本中,然后再次将其复制并粘贴到网络浏览器中(如果您的浏览器具有此选项,则直接使用上下文菜单"粘贴未格式化") 。 谢谢。

三十六小时_GS
3楼-- · 2020-09-24 02:07

PS:CL_ABAP_CODEPAGE比CL_ABAP_CONV_IN_CE更易于使用。

宇峰科技
4楼-- · 2020-09-24 02:19

如果它不能回答问题, 请不要使用答案来发布此类信息。 就像Sandra一样,使用注释部分。

我确定您会在其他非SAP网站上找到一些有关Unicode如何影响HTTP连接中用户/密码传递的信息。

一周热门 更多>