5

का उपयोग कर वेबएपीआई कॉल मैं वॉली स्ट्रिंग अनुरोध का उपयोग कर सर्वर से टोकन तक पहुंचने का प्रयास कर रहा हूं। मैंने एक JsonObjectRequest भी बनाने की कोशिश की है। दोनों नीचे हैं।वॉली

public void getAuthenticationTokens(Object param1, final CustomListener<String> listener) 
    { 

     //String url = prefixURL + "this/request/suffix"; 
     String url = "https://lw.xxx.co.uk/connect/token"; 


     StringRequest request = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) { 
         // response 
         Log.e("Response", response); 
        } 
       }, 


       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         // error 
         Log.e("Error.Response", error.networkResponse.toString()); 
        } 
       } 
     ) { 



      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String,String> params = new HashMap<>(); 
       params.put("Content-Type","application/x-www-form-urlencoded"); 
       //..add other headers 
       return params; 
      } 

      @Override 
      protected Map<String, String> getParams() 
      { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("scope", "openid email phone profile offline_access roles"); 
       params.put("resource", "window.location.origin"); 
       params.put("grant_type", "password"); 
       params.put("username", "[email protected]"); 
       params.put("password", "tempPxxx"); 


       return params; 
      } 

     }; 

     requestQueue.add(request); 

public void getAuthenticationTokens(Object param1, final CustomListener<String> listener) 
    { 

     //String url = prefixURL + "this/request/suffix"; 
     String url = "https://lw.xxx.co.uk/connect/token"; 

Map<String, Object> jsonParams = new HashMap<>(); 

     jsonParams.put("scope", "openid email phone profile offline_access roles"); 
     jsonParams.put("resource", "window.location.origin"); 
     jsonParams.put("grant_type", "password"); 
     jsonParams.put("username", "[email protected]"); 
     jsonParams.put("password", "tempPxxx"); 

     JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(jsonParams), 
       new Response.Listener<JSONObject>() 
       { 
        @Override 
        public void onResponse(JSONObject response) 
        { 
         Log.d(TAG + ": ", "somePostRequest Response : " + response.toString()); 
         if(null != response.toString()) 
          listener.getResult(response); 
        } 
       }, 

       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) 
        { 
         if (null != error.networkResponse) 
         { 

          Log.e(TAG + ": ", "Error Response code: " + error.networkResponse.statusCode); 



          listener.getResult(null); 
         } 
        } 
       }){ 
        @Override 
        public Map<String, String> getHeaders() throws AuthFailureError { 
         // Map<String,String> params = super.getHeaders(); 
         // if(params==null)params = new HashMap<>(); 
         Map<String,String> params = new HashMap<>(); 
         params.put("Content-Type","application/x-www-form-urlencoded"); 
         //..add other headers 
         return params; 
        } 
     }; 



     requestQueue.add(request); 

E/Volley: [31388] BasicNetwork.performRequest: Unexpected response code 400 for https://lw.xxx.co.uk/connect/token 

:

मैं सर्वर से निम्नलिखित प्रतिक्रिया मिल।

मेरे सहयोगी जिन्होंने सर्वर-साइड कोड लिखा है, ने एंड्रॉइड को निम्नलिखित कोणीय कोड (एपीआई के साथ काम करने वाला कोड) को परिवर्तित करने के लिए कहा है।

क्या कोई इससे मदद कर सकता है?

getLoginEndpoint(userName: string, password: string): Observable<Response> { 

     let header = new Headers(); 
     header.append("Content-Type", "application/x-www-form-urlencoded"); 

     let searchParams = new URLSearchParams(); 
     searchParams.append('username', userName); 
     searchParams.append('password', password); 
     searchParams.append('grant_type', 'password'); 
     searchParams.append('scope', 'openid email phone profile offline_access roles'); 
     searchParams.append('resource', window.location.origin); 

     let requestBody = searchParams.toString(); 

     return this.http.post(this.loginUrl, requestBody, { headers: header }); 
    } 

उत्तर

5

समस्या कुछ चीजें थीं।

मैंने "params.put (" संसाधन "," window.location.origin ") को बदल दिया;" साथ "params.put (" संसाधन "," https://lw.xxx.co.uk ");"

इसके अलावा, मुझे पता चला कि वॉली getHeaders ओवरराइड को अनदेखा करता है, इसलिए मैंने उस विधि को टिप्पणी की और हेडर सेट करने के लिए निम्नलिखित का उपयोग किया।

@Override 
      public String getBodyContentType() { 
       return "application/x-www-form-urlencoded"; 
      } 

public void getAuthenticationTokens(Object param1, final String userName, final String password, final CustomListener<JSONObject> listener) 
    { 
     String url = "https://lw.xxx.co.uk/connect/token"; 
     StringRequest request = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) { 
         // response 
         Log.e("Response", response); 

        } 
       }, 
       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         // error 
         Log.e("Error.Response", error.networkResponse.toString()); 
        } 
       } 
     ) { 

      /* @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String,String> params = new HashMap<>(); 
       params.put("Content-Type","application/x-www-form-urlencoded"); 
       //..add other headers 
       return params; 
      }*/ 
      @Override 
      public String getBodyContentType() { 
       return "application/x-www-form-urlencoded"; 
      } 

      @Override 
      protected Map<String, String> getParams() 
      { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("scope", "openid email phone profile offline_access roles"); 
       params.put("resource", "https://lw.xxx.co.uk"); 
       params.put("grant_type", "password"); 
       params.put("username", userName); 
       params.put("password", password); 
       return params; 
      } 


      @Override 
      protected VolleyError parseNetworkError(VolleyError response) { 
       try { 

        String json = new String(response.networkResponse.data, HttpHeaderParser.parseCharset(response.networkResponse.headers)); 
        Log.e(TAG, "reponse error = " + json); 
       }catch (Exception e){} 
       return super.parseNetworkError(response); 
      } 
     }; 
     requestQueue.add(request); 

    }//end of getAuthenticationTokens 
+0

यह देखने के लिए खुशी हुई कि आपने इसे ठीक किया है। कृपया हमें बताएं कि वहां क्या समस्या है? –

+1

@IntelliJAmiya हाय धन्यवाद। हां, क्षमा करें, मैंने एक उत्तर पर टिप्पणी पर जो किया मैंने अपडेट किया। दुर्भाग्य से उस व्यक्ति ने अपनी पोस्ट हटा दी, इसलिए मेरी टिप्पणी भी गायब हो गई। मैंने अभी अपना जवाब अपडेट कर लिया है। धन्यवाद – turtleboy

संबंधित मुद्दे