尝试通过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上创建的服务需要用户进行身份验证,但该选项以前已禁用。
我不知道如何解决这个问题,任何人都这样做? 感谢您的关注
答案 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;
}