android-volley - 未找到证书路径的信任锚 - 带有 Volley 的 https POST 请求不起作用
问题描述
这个问题经常被问到,但所有的答案都是 2 或 3 岁。我登录了我的 Android 应用程序,日期保存在我的云服务器上的 MySQL 数据库中,该数据库具有 SSL 证书。当我在本地机器上测试我的应用程序时,一切都很好,但是当我尝试与我的云服务器连接时,我收到消息“找不到证书路径的信任锚”。我的凭证没问题。我知道我必须设置一个 sslSocketFactory。我尝试了很多,但一个有效。我现在坐了好几天。可能有人知道如何解决
这里我的代码没有 sslSocketFactory
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.logintest, container, false);
btn_login = view.findViewById(R.id.btn_logintest);
email = view.findViewById(R.id.etEmail);
password = view.findViewById(R.id.etPassword);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
login();
}
public void login() {
str_email = email.getText().toString();
str_password = password.getText().toString();
if(!str_email.equals("") && !str_password.equals("")) {
StringRequest request = new StringRequest(Request.Method.POST, URL_LOGIN, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
DummyFragment dummyFragment = new DummyFragment();
fragmentTransaction.replace(R.id.container,dummyFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Log.e("Text: ", response);
Toast.makeText(getActivity(), "erfolgreicher Text: " +response, Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity(), "Text: " +error.getMessage().toString(), Toast.LENGTH_SHORT).show();
}
}
) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("str_email", email.getText().toString());
params.put("str_password", password.getText().toString());
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
try {
HashMap<String, String> headers = new HashMap<>();
String credentials = "xxxxxxxxx:xxxxxxxxxx";
String auth = "Basic "
+ Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
headers.put("Content-Type", "application/json");
headers.put("Authorization", auth);
return headers;
} catch (Exception e) {
Log.e(TAG, "Authentication failure");
Toast.makeText(getActivity(), "" +e, Toast.LENGTH_LONG).show();
}
return super.getHeaders();
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
requestQueue.add(request);
}
else {
if (email.getText().toString().equals("")) {
Toast.makeText(getActivity(), "Bitte Email Adresse eingeben", Toast.LENGTH_SHORT).show();
} else if (password.getText().toString().equals("")) {
Toast.makeText(getActivity(), "Bitte Passwort eingeben", Toast.LENGTH_SHORT).show();
}
}
}
});
return view;
}
}
我尝试了来自 android 开发者页面的代码,但出现了一些错误。我试图设置 network_security.xml 但它对我不起作用。当我用邮递员测试我的凭据时,我得到响应 200。
解决方案
推荐阅读
- android - 在内核中更改 Android 设备方向
- ssl - 提取TLS记录层的C程序
- python - pywhatkit 库出现 502 错误网关错误
- yaml - 如何使用 yml 文件验证空手道结构响应
- python - python中是否有一种有效的方法将矩阵中的每一列与同一矩阵中的所有列相乘?
- java - Jboss 无法识别 .yml 文件结构
- spring - 将 PostgreSQL 模式导入 H2 数据库
- amazon-web-services - 无法在 AWS MediaLive 中播放 mp4 输入
- jsonpath - JSONPath 中的安全导航运算符?
- facebook-graph-api - 开始使用 Instagram oEmbed 功能