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

额外权限

要有这个权限:

<uses-permission android:name="android.permission.INTERNET" />

HTTP安全考虑

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

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

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

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

<application
    android:usesCleartextTraffic="true"
    ... >
    ...
</application>
  1. 使用网络安全配置文件:如果你的应用只是需要连接到特定的不受信任的 HTTP 服务,你可以创建一个网络安全配置文件,定义允许的网络请求。示例:
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">your.insecure.domain</domain>
    </domain-config>
</network-security-config>

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

<application
    android:networkSecurityConfig="@xml/network_security_config"
    ... >
    ...
</application>

使用 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<ResponseBody> 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<ResponseBody> call = apiService.checkIn(body);

        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> 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<ResponseBody> 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())

相关推荐

  1. android快速网络请求android-networking

    2024-05-26 03:34:30       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-26 03:34:30       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-26 03:34:30       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-26 03:34:30       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-26 03:34:30       18 阅读

热门阅读

  1. 黄金价格创新高,交易风险提示

    2024-05-26 03:34:30       11 阅读
  2. gateway基本配置

    2024-05-26 03:34:30       10 阅读
  3. 时政|杂粮产业

    2024-05-26 03:34:30       13 阅读
  4. MYSQL--多表查询

    2024-05-26 03:34:30       9 阅读
  5. Gopeed的高级用法

    2024-05-26 03:34:30       13 阅读
  6. GitLab的原理及应用详解(四)

    2024-05-26 03:34:30       11 阅读
  7. 揭秘软件测试工程师:事业前景和成功秘诀

    2024-05-26 03:34:30       10 阅读
  8. 前端面试题日常练-day33 【面试题】

    2024-05-26 03:34:30       13 阅读