2014-09-04 29 views
2

我想發送POST到服務器的正確或錯誤的正文。我有這個代碼,我使用Volley庫排球體400錯誤

ShoozyHeader()將內容類型設置爲text/plain並接受爲驗證所需的文本/純文本和其他頭文件。

如果我嘗試http://requestmaker.com/和服務器正確響應,但我運行此代碼,服務器的響應:

錯誤的請求 - 無效的標題 HTTP錯誤400請求具有無效的頭名。

如果我刪除getBody(),服務器響應正常。

final String url = POSTS_URI + idPost + "/likes"; 

    StringRequest strReq = new StringRequest(Request.Method.POST, 
      url, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, response); 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error: " + error.getMessage()); 
      Toast.makeText(act, "Network error", Toast.LENGTH_SHORT).show(); 
     } 
    } 
    ) { 
     @Override 
     public byte[] getBody() throws AuthFailureError { 
      return "true".getBytes(); 
     } 
    }; 

回答

1

試試這個,它的工作對我罰款:

JSONObject params = new JSONObject(); 

try { 
    params.put("likes", "true"); 

} catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
// 

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, 
     url, params, 
     new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject response) { 
       Log.d(TAG, response.toString()); 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
      } 
     }) { 

    /** 
    * Passing some request headers 
    * */ 
    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("Content-Type", "application/json; charset=utf-8"); 
     return headers; 
    } 

}; 
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(60000, 
     DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
     DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

// Adding request to request queue 
getRequestQueue(jsonObjReq); 
0

你重寫你的類,它擴展請求getHeaders?

下面是如何:

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
    return headers != null ? headers : super.getHeaders(); 
} 

這裏是塞汀了一個Base64(用戶名,密碼)報頭的示例:

@Override 
    private HashMap<String, String> getHeaders() { 
     HashMap<String, String> headers = new HashMap<>(); 
     headers.put("Authorization", getAuthentication("usernameExample", "passwordExample")); 
     headers.put("Content-Type", "application/json; charset=utf-8"); 
     Log.d(TAG + ""); 
     return headers; 
    } 

private String getAuthentication(String username, String password) { 
     String credentials = String.format("%s:%s", username, password); 
     String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.DEFAULT); 
     return auth; 
    }