2015-07-07 2 views
0

Я пытаюсь вызвать RESTful API в своем приложении Android с помощью Volley. API требует, чтобы пользователь аутентифицировался с использованием открытого ключа и хэша, который будет отправлен через HTTP-заголовок.Как обеспечить отправку запроса заголовка при использовании Volley

Когда я пытаюсь отправить запрос POST с заголовками открытого ключа и хэша, я обнаружил, что заголовок не добавляется/принимается сервером, и я получаю ошибку Volley - BasicNetwork.performRequest: Неожиданный код ответа 400

Это метод, который я пытаюсь использовать для отправки запроса заголовка с параметрами запроса с использованием JSON.

HashMap<String, String> params = new HashMap<String, String>(); 


       params.put("email", email.getText().toString()); 
       params.put("password", password.getText().toString()); 

       pDialog = new ProgressDialog(LoginActivity.this); 
       pDialog.setMessage("Logging in..."); 
       pDialog.setIndeterminate(false); 
       pDialog.setCancelable(false); 
       pDialog.show(); 

       RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue(); 
       JsonObjectRequest request = new JsonObjectRequest(ApplicationConstants.url_sign_in, new JSONObject 
         (params), new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         try { 
          Log.d(TAG, "onResponse") ; 
          error = response.getBoolean(TAG_ERROR); 
          message = response.getString(TAG_MESSAGE); 
          Toast.makeText(LoginActivity.this, message + " value of error", Toast.LENGTH_LONG).show(); 
          pDialog.cancel(); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 


         Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show(); 


        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Log.d(TAG,"onErrorResponse()") ; 
         pDialog.cancel(); 
         NetworkResponse networkResponse = error.networkResponse; 
         if (networkResponse != null && networkResponse.statusCode == HttpStatus.SC_UNAUTHORIZED) { 
          // HTTP Status Code: 401 Unauthorized 
          Toast.makeText(LoginActivity.this, message, Toast.LENGTH_SHORT).show(); 
         } 


        } 
       }){ 
        @Override 
        public Map<String, String> getHeaders() throws AuthFailureError { 

         HashMap<String, String> headers = new HashMap<String, String>(); 
         headers.put(ApplicationConstants.publicKey, "Yahoo"); 
         headers.put(ApplicationConstants.hash, "Google"); 
         Log.d(TAG,"getHeaders()") ; 
         return headers; 
        } 

       }; 

       requestQueue.add(request); 

ApplicationConstants класса

public interface ApplicationConstants { 

//String ip = "10.0.3.2"; 
String ip = "192.168.100.2"; 
String publicKey = "pskPublicKey"; 
String hash = "pskPublicKey"; 

As you can see I supplied the public key and the hash in postman and I also sent data in the header from android but it is not being received in the server

Если я пытаюсь это только с параметрами запроса он работает, но когда, когда я пытаюсь отправить запрос заголовок это не удается отправить запрос заголовка.

Как вы можете видеть на картинке, я снабжал открытый ключ и хэш в почтальоном, и я также послал данные в заголовок от андроида, но он не получил на сервере

ответ

0

400 означает Плохую запрос на сервер. Возможно, заголовки ошибаются. Вы можете попробовать добавить заголовок Content-Type=application/json следующим

header.put("Content-Type", "application/json"); 

Если это не работает, то вы должны попробовать запрос в REST client и посмотреть, если он работает с заданными заголовками. Убедитесь, что запрос отлично работает на остальном клиенте, прежде чем пытаться сломать голову в Android.

+0

Это делает работу клиента REST я проверить его с помощью пост человека. Я также устал 'header.put ("Content-Type", "application/json"); –

+0

Если вы не возражаете, можете ли вы приложить скриншот запроса клиента postman rest, который работает? Затем я могу сравнить параметры/заголовки, которые вы отправляете туда, и код Android. – Antrromet

+0

Вы уверены, что константы 'ApplicationConstants.publicKey' и' ApplicationConstants.hash' соответствуют «pskPublicKey» и «pskPrivateKey» соответственно? – Antrromet

0

переопределить ваш метод getBodyContentType

public String getBodyContentType() 
    { 
     return "application/json"; 
    } 
Смежные вопросы