Android,对POST后端的HTTP POST请求

时间:2014-09-04 14:28:52

标签: android drupal drupal-7 httprequest httpresponse

尝试通过HTTP请求实现通信时遇到问题。 更确切地说,我使用了Volley库,这是我的客户端请求:

StringRequest sr = new StringRequest(Request.Method.POST, "http://mysite/mydrupalservice",
                                        new Response.Listener<String>() {
                                            @Override
                                            public void onResponse(String response) {
                                                Log.w("CheckinFragment. POST call, RESPONSE:", String.valueOf(response));
                                            }
                                        },
                                        new Response.ErrorListener() {
                                            @Override
                                            public void onErrorResponse(VolleyError error) {
                                                VolleyLog.e("CheckinFragment. POST call, ERROR:", String.valueOf(error));
                                            }
                                        }){

                                    @Override
                                    protected Map<String,String> getParams()
                                    {
                                        Map<String,String> params = new HashMap<String, String>();
                                        params.put("action", "something");
                                        params.put("access_token", "something");
                                        params.put("activity", "1");
                                        return params;
                                    }

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

                                // add the request object to the queue to be executed
                                Controller.getInstance().addToRequestQueue(sr);`

此代码在Android端正确执行,但收到​​的回复如下:

BasicNetwork.performRequest: Unexpected response code 404 for http://mysite/myservice
android.volley.AuthFailureError.

我已尝试使用http://httpbin.org/来测试我的客户端代码并且它可以正常工作。

所以,我认为问题可能是服务器端。 如果我尝试使用POST参数执行HTTP请求,例如使用Firefox的扩展名Poster,我会从服务器收到正确的响应。

查看401错误代码,我认为以前在Drupal上创建的服务需要用户进行身份验证,但该选项以前已禁用。

我不知道如何解决这个问题,任何人都这样做? 感谢您的关注

1 个答案:

答案 0 :(得分:0)

也许尝试使用url编码?例如:

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