2014-09-04 32 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; 
    }