Retrofit实现HTTPS请求

服务器下载文件(crt+key转cer)

  • 在jdk\bin文件下复制openssl.exe(链接有)
    oppenssl.exe
  • 使用openssl x509 -in (你的服务器).crt -keyform (服务器私钥).key -out (Retrofit使用的Http).cer -outform der
    这里写图片描述

Retrofit请求中配置

  1. 使用OkHttpClient.sslSocketFactory()设置Https请求

    OkHttpClient build = new OkHttpClient.Builder()
      //                .connectTimeout(20000, TimeUnit.MILLISECONDS)
                      .connectTimeout(10000, TimeUnit.MILLISECONDS)
                      .writeTimeout(10000, TimeUnit.MILLISECONDS)
                      .readTimeout(10000, TimeUnit.MILLISECONDS)
                      //设置Https请求
      //                .sslSocketFactory(sslSocketFactory)
                      
### 使用Retrofit在Android中实现HTTP请求 Retrofit 是一个类型安全的 HTTP 网络库,专为 Android 和 Java 应用程序设计。它通过简化网络请求和响应解析的过程,使得开发者可以更高效地与 RESTful API 进行交互[^4]。 #### 1. 添加依赖 为了使用 Retrofit,首先需要在项目的 `build.gradle` 文件中添加相应的依赖项。以下是常用的依赖配置: ```gradle implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // Gson 转换器 implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3' // 日志拦截器 ``` 确保同步项目以应用这些更改[^1]。 #### 2. 创建接口定义 Retrofit 使用接口来定义 HTTP 请求。以下是一个示例接口 `ApiService`,用于演示 GET 和 POST 请求的定义: ```java package com.example.retrofitdemo; import retrofit2.Call; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; public interface ApiService { // 定义无参 GET 请求 @GET("users") Call<List<User>> getUsers(); // 定义带参数的 GET 请求 @GET("user") Call<User> getUserById(@Query("id") int id); // 定义无参 POST 请求 @POST("createUser") Call<User> createUser(); // 定义带参数的 POST 请求 @FormUrlEncoded @POST("updateUser") Call<User> updateUser(@Field("id") int id, @Field("name") String name); } ``` 此接口定义了多种类型的 HTTP 请求,并通过注解指定了请求方法、路径以及参数传递方式[^5]。 #### 3. 配置 Retrofit 实例 创建一个单例类来管理 Retrofit 实例,确保在整个应用程序中复用相同的实例以节省资源。以下是一个示例实现: ```java package com.example.retrofitdemo; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static final String BASE_URL = "https://api.example.com/"; private static RetrofitClient instance; private Retrofit retrofit; private RetrofitClient() { HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(loggingInterceptor) .build(); retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .client(client) .addConverterFactory(GsonConverterFactory.create()) .build(); } public static synchronized RetrofitClient getInstance() { if (instance == null) { instance = new RetrofitClient(); } return instance; } public ApiService getApiService() { return retrofit.create(ApiService.class); } } ``` 在此代码中,配置了 OkHttp 客户端并添加了日志拦截器以便调试网络请求。同时,使用 Gson 转换器将 JSON 数据自动转换为 Java 对象[^2]。 #### 4. 执行请求 通过调用 Retrofit 的 `enqueue` 方法可以发起异步请求。以下是一个简单的示例: ```java package com.example.retrofitdemo; import android.os.Bundle; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ApiService apiService = RetrofitClient.getInstance().getApiService(); Call<List<User>> call = apiService.getUsers(); call.enqueue(new Callback<List<User>>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { if (response.isSuccessful()) { List<User> users = response.body(); Toast.makeText(MainActivity.this, "用户数量: " + users.size(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call<List<User>> call, Throwable t) { Toast.makeText(MainActivity.this, "网络错误: " + t.getMessage(), Toast.LENGTH_SHORT).show(); } }); } } ``` 这段代码展示了如何从服务器获取用户列表并在界面上显示结果[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值