【Android开发】Android请求出现网络请求失败,HTTP请求,安全网络通信与权限管理

您所在的位置:网站首页 安卓请求网络连接失败 【Android开发】Android请求出现网络请求失败,HTTP请求,安全网络通信与权限管理

【Android开发】Android请求出现网络请求失败,HTTP请求,安全网络通信与权限管理

2024-07-09 14:38| 来源: 网络整理| 查看: 265

额外权限

要有这个权限:

HTTP安全考虑

从 Android 9(API 级别 28)开始,默认情况下不支持通过 HTTP 访问网络,而要求使用 HTTPS。这是出于安全考虑,因为 HTTPS 可以提供数据传输的加密和身份验证。因此,如果你的应用目标设备的 Android 版本为 9 或更高,确实需要使用 HTTPS 进行网络请求。

为了解决这个问题,你有几个选项:

使用 HTTPS:将你的服务器配置为支持 HTTPS,并相应地更新 Android 代码中的基础 URL,将 http 修改为 https。

在 AndroidManifest.xml 中添加网络安全配置:如果你的服务器尚未配置 HTTPS,你可以在 AndroidManifest.xml 中添加网络安全配置,允许应用访问不安全的 HTTP 资源。这样做会降低安全性,因此不建议在生产环境中使用。配置如下:

... 使用网络安全配置文件:如果你的应用只是需要连接到特定的不受信任的 HTTP 服务,你可以创建一个网络安全配置文件,定义允许的网络请求。示例: your.insecure.domain

然后在 AndroidManifest.xml 中引用这个文件:

...

使用 HTTPS 是推荐的做法,因为它提供了更好的安全性。

在这里插入图片描述

这样就可以访问接口

gradle加上:

implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

实现请求:

private static final String BASE_URL = "http://120.46.128.4:8001/"; interface ApiService { @POST("check_in") Call checkIn(@Body RequestBody body); } private void checkIn(String name, String studentID) throws JSONException { Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); JSONObject json = new JSONObject(); json.put("name", name); json.put("student_id", studentID); RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json.toString()); Call call = apiService.checkIn(body); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { try { JSONObject jsonResponse = new JSONObject(response.body().string()); String message = jsonResponse.getString("message"); runOnUiThread(() -> Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show()); } catch (Exception e) { e.printStackTrace(); runOnUiThread(() -> Toast.makeText(MainActivity.this, "响应解析失败", Toast.LENGTH_SHORT).show()); } } else { runOnUiThread(() -> Toast.makeText(MainActivity.this, "签到失败", Toast.LENGTH_SHORT).show()); } } @Override public void onFailure(Call call, Throwable t) { runOnUiThread(() -> Toast.makeText(MainActivity.this, "网络请求失败", Toast.LENGTH_SHORT).show()); } }); }

python是这么请求:

import requests # 接口地址 url = "http://120.46.128.4:8001/insert_student_record" # 根据实际的地址进行修改 # 要插入的学生记录 data = { "name": "张三", "student_id": "123456xx" } # 发送 POST 请求 response = requests.post(url, json=data) # 输出响应结果 print(response.json()) 问询、帮助

你如果需要帮助,请看这里:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3