【发布时间】:2018-02-07 06:04:59
【问题描述】:
我正在制作一个总是调用服务器来加载数据(JSON 数据)的应用程序。 像 google api 一样,我如何确保 POST 请求是否来自我的 android 应用程序。 如何确保这一点?
我总是向 php 服务器发送 POST 请求的代码如下所示
下面的代码发送了手机和密码等数据来登录 但是,如果有人从我的 android 应用程序中复制此内容并在他们的应用程序中使用。然后服务器将被黑。如何防止它只接受来自我的 android 应用程序而不是来自任何其他来源的 POST 请求。
StringRequest stringRequest = new StringRequest(Request.Method.POST, REQ_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(HomeActivity.this, "" + response , Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
String message = null;
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
message=("Network Timeout Error");}
else if (error instanceof AuthFailureError) {
message=("Authentication Failure");}
else if (error instanceof ServerError) {
message=("Server Error");}
else if (error instanceof NetworkError) {
message=("Network Error");}
else if (error instanceof ParseError) {
message=("Network Timeout Error");}
error.printStackTrace();
Toast.makeText(HomeActivity.this, "" + message , Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("reqtype", "login");
params.put("phone", phone);
params.put("pass", password);
return params;
}
};
int socketTimeout = 15000;//30 seconds - change to what you want
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(policy);
ServerRequest.getInstance(HomeActivity.this).addtoRequestQue(stringRequest);
【问题讨论】: