Android Volley使用Request.POST调用oData导致403错误

2020-09-24 08:33发布

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

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


嗨,专家

我正在使用Android上的Volley API调用SAP的oData服务,并为Request.POST收到HTTP 403错误。 但是对于另一个Service程序的Request.GET来说运行正常。 我可以知道我的调用oData Service的代码是否存在任何问题。

我传递了从我的第一个请求调用中获得的MYSAPSSO2令牌和CSRF令牌。 但是出现身份验证错误。 知道这里缺少什么吗?

使用JQUERY/SAPUI5的相同oData POST服务运行正常,没有任何问题。

尝试{
           /** json对象参数**/
             JSONObject jsonObject =新的JSONObject();
             jsonObject.put(" SO",so);
             jsonObject.put(" STATUS",status);
             jsonObject.put(" NET_VALUE",数量);
             Log.i(" XXXX",thisMethod +" jsonObject params" + jsonObject.toString()+"");
             JsonObjectRequest jsonObjectRequest =新的JsonObjectRequest(Request.Method.GET,url,null,新的Response.Listener (){
                 @Override
                 公共无效onResponse(JSONObject jsonRespObj){
                     Log.i(" XXXX",thisMethod +"来自通知服务的响应:" + jsonRespObj.toString());
                 }
             },新的Response.ErrorListener(){
                 @Override
                 公共无效onErrorResponse(VolleyError volleyError){
                     Log.i(" XXXXX",thisMethod +"错误响应:" + volleyError);
                     volleyError.printStackTrace();
                 }
             }
             ){
                 @Override
                 公共Map  getHeaders()抛出AuthFailureError {
                     Map 参数= new HashMap ();
                     如果(mysapsso2!= null){
                         Log.i(" XXX",thisMethod +" MYSAPSSO2是:" + TokenHandler.getMYSAPSSO2Token());
                         Log.i(" XXXX",thisMethod +" X-CSRF-Token是:" + TokenHandler.getCSRFToken());
                         params.put(" Cookie",ServiceClass.mysapsso2);
                         params.put(" X-CSRF-Token",TokenHandler.getCSRFToken());
                         params.put(" contentType"," application/json");
                     }
                     返回参数
                 }
             };
             queue.add(jsonObjectRequest);
         } catch(JSONException e){
             Log.e(" XXX",thisMethod +"出现错误=>" + e.getMessage());
             e.printStackTrace();
         }
         catch(例外e){
             Log.e(" XXXX",thisMethod +"出现错误=>" + e.getMessage());
             e.printStackTrace();
         } 

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

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


嗨,专家

我正在使用Android上的Volley API调用SAP的oData服务,并为Request.POST收到HTTP 403错误。 但是对于另一个Service程序的Request.GET来说运行正常。 我可以知道我的调用oData Service的代码是否存在任何问题。

我传递了从我的第一个请求调用中获得的MYSAPSSO2令牌和CSRF令牌。 但是出现身份验证错误。 知道这里缺少什么吗?

使用JQUERY/SAPUI5的相同oData POST服务运行正常,没有任何问题。

尝试{
           /** json对象参数**/
             JSONObject jsonObject =新的JSONObject();
             jsonObject.put(" SO",so);
             jsonObject.put(" STATUS",status);
             jsonObject.put(" NET_VALUE",数量);
             Log.i(" XXXX",thisMethod +" jsonObject params" + jsonObject.toString()+"");
             JsonObjectRequest jsonObjectRequest =新的JsonObjectRequest(Request.Method.GET,url,null,新的Response.Listener (){
                 @Override
                 公共无效onResponse(JSONObject jsonRespObj){
                     Log.i(" XXXX",thisMethod +"来自通知服务的响应:" + jsonRespObj.toString());
                 }
             },新的Response.ErrorListener(){
                 @Override
                 公共无效onErrorResponse(VolleyError volleyError){
                     Log.i(" XXXXX",thisMethod +"错误响应:" + volleyError);
                     volleyError.printStackTrace();
                 }
             }
             ){
                 @Override
                 公共Map  getHeaders()抛出AuthFailureError {
                     Map 参数= new HashMap ();
                     如果(mysapsso2!= null){
                         Log.i(" XXX",thisMethod +" MYSAPSSO2是:" + TokenHandler.getMYSAPSSO2Token());
                         Log.i(" XXXX",thisMethod +" X-CSRF-Token是:" + TokenHandler.getCSRFToken());
                         params.put(" Cookie",ServiceClass.mysapsso2);
                         params.put(" X-CSRF-Token",TokenHandler.getCSRFToken());
                         params.put(" contentType"," application/json");
                     }
                     返回参数
                 }
             };
             queue.add(jsonObjectRequest);
         } catch(JSONException e){
             Log.e(" XXX",thisMethod +"出现错误=>" + e.getMessage());
             e.printStackTrace();
         }
         catch(例外e){
             Log.e(" XXXX",thisMethod +"出现错误=>" + e.getMessage());
             e.printStackTrace();
         } 
付费偷看设置
发送
2条回答
打个大熊猫
1楼-- · 2020-09-24 09:09

您是否连接到基于Netweaver的系统? 您可以检查OCF的相应ICF节点是否处于活动状态吗?

蓋茨
2楼-- · 2020-09-24 09:28

我认为您是说odata服务是否在oData节点下的SICF中处于活动状态? 是的,它是活动的。 当厌倦了SAPUI5中的jQuery.ajax或ODATAModel时,相同的服务可以正常工作,但是我想出于其他目的从Android的Volley API中访问该服务,但失败了。

一周热门 更多>