OkHttp
| implementation("com.squareup.okhttp3:okhttp:4.9.0") |
| <uses-permission android:name="android.permission.INTERNET"/> |
同步与异步请求
| package com.example.myokhttp; |
| |
| import androidx.appcompat.app.AppCompatActivity; |
| |
| import android.os.Bundle; |
| import android.util.Log; |
| import android.view.View; |
| |
| import org.jetbrains.annotations.NotNull; |
| |
| import java.io.IOException; |
| |
| import okhttp3.Call; |
| import okhttp3.Callback; |
| import okhttp3.FormBody; |
| import okhttp3.OkHttpClient; |
| import okhttp3.Request; |
| import okhttp3.Response; |
| |
| public class MainActivity extends AppCompatActivity { |
| |
| private static final String TAG = "MainActivity"; |
| private OkHttpClient okHttpClient; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_main); |
| |
| okHttpClient = new OkHttpClient(); |
| } |
| |
| public void getSync(View view) { |
| |
| new Thread(()->{ |
| Request build = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build(); |
| |
| Call call = okHttpClient.newCall(build); |
| |
| |
| try { |
| Response response = call.execute(); |
| Log.d(TAG, "getSync: " + response.body().string()); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| }).start(); |
| } |
| |
| public void getAsync(View view) { |
| Request build = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build(); |
| |
| Call call = okHttpClient.newCall(build); |
| |
| |
| call.enqueue(new Callback() { |
| @Override |
| public void onFailure(@NotNull Call call, @NotNull IOException e) { |
| |
| } |
| |
| |
| @Override |
| public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { |
| if(response.isSuccessful()){ |
| Log.d(TAG, "getSync: " + response.body().string()); |
| } |
| } |
| }); |
| } |
| |
| public void postSync(View view) { |
| new Thread(()->{ |
| FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build(); |
| |
| Request build = new Request.Builder().url("https://www.httpbin.org/post") |
| .post(formBody).build(); |
| |
| |
| Call call = okHttpClient.newCall(build); |
| |
| |
| try { |
| Response response = call.execute(); |
| Log.d(TAG, "postSync: " + response.body().string()); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| }).start(); |
| |
| } |
| |
| public void postASync(View view) { |
| FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build(); |
| |
| Request build = new Request.Builder().url("https://www.httpbin.org/post") |
| .post(formBody).build(); |
| |
| |
| Call call = okHttpClient.newCall(build); |
| |
| call.enqueue(new Callback() { |
| @Override |
| public void onFailure(@NotNull Call call, @NotNull IOException e) { |
| |
| } |
| |
| @Override |
| public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { |
| if(response.isSuccessful()){ |
| Log.d(TAG, "postAsync: " + response.body().string()); |
| } |
| } |
| }); |
| } |
| } |
上传文件
| @Test |
| public void uploadFileTest() throws IOException { |
| File file1 = new File("C:\\Users\\86139\\Downloads\\1.txt"); |
| File file2 = new File("C:\\Users\\86139\\Downloads\\2.txt"); |
| |
| OkHttpClient client = new OkHttpClient(); |
| |
| MultipartBody multipartBody = new MultipartBody.Builder() |
| .addFormDataPart("file1", file1.getName(), RequestBody.create(file1, MediaType.parse("text/plain"))) |
| .addFormDataPart("file2", file2.getName(), RequestBody.create(file2, MediaType.parse("text/plain"))) |
| .build(); |
| Request request = new Request.Builder().url("https://www.httpbin.org/post").post(multipartBody).build(); |
| |
| Call call = client.newCall(request); |
| Response response = call.execute(); |
| System.out.println(response.body().string()); |
| |
| } |
提交json
| @Test |
| public void jsonTest() throws IOException { |
| OkHttpClient client = new OkHttpClient(); |
| |
| RequestBody requestBody = RequestBody.create("{\"a\":1, \"b\":2}", MediaType.parse("application/json")); |
| Request request = new Request.Builder().url("https://www.httpbin.org/post").post(requestBody).build(); |
| |
| Call call = client.newCall(request); |
| Response response = call.execute(); |
| System.out.println(response.body().string()); |
| } |
OkHttp的配置
拦截器
| @Test |
| public void interceptorTest() throws IOException { |
| OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() { |
| @NotNull |
| @Override |
| public Response intercept(@NotNull Chain chain) throws IOException { |
| |
| Request request = chain.request().newBuilder().addHeader("os", "android") |
| .addHeader("version", "1").build(); |
| Response response = chain.proceed(request); |
| |
| return response; |
| } |
| }).addNetworkInterceptor(new Interceptor() { |
| @NotNull |
| @Override |
| public Response intercept(@NotNull Chain chain) throws IOException { |
| System.out.println(chain.request().header("version")); |
| return chain.proceed(chain.request()); |
| } |
| }).build(); |
| |
| Request build = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build(); |
| try { |
| Call call = okHttpClient.newCall(build); |
| Response response = call.execute(); |
| System.out.println(response.body().string()); |
| } finally { |
| |
| } |
| } |
缓存
| new OkHttpClient.Builder() |
| .cache(new Cache(new File("C:\\Users\\86139\\Downloads\\2.txt"), 1024*1024)) |
| .build(); |
Cookie
| package com.example.myokhttp; |
| |
| import org.jetbrains.annotations.NotNull; |
| import org.junit.Test; |
| |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import okhttp3.Call; |
| import okhttp3.Cookie; |
| import okhttp3.CookieJar; |
| import okhttp3.FormBody; |
| import okhttp3.HttpUrl; |
| import okhttp3.OkHttp; |
| import okhttp3.OkHttpClient; |
| import okhttp3.Request; |
| import okhttp3.Response; |
| |
| public class CookieUnitTest { |
| |
| Map<String, List<Cookie>> map = new HashMap<>(); |
| |
| @Test |
| public void cookieTest() throws IOException { |
| |
| OkHttpClient okHttpClient = new OkHttpClient.Builder() |
| .cookieJar(new CookieJar() { |
| @Override |
| public void saveFromResponse(@NotNull HttpUrl httpUrl, @NotNull List<Cookie> list) { |
| map.put(httpUrl.host(), list); |
| } |
| |
| @NotNull |
| @Override |
| public List<Cookie> loadForRequest(@NotNull HttpUrl httpUrl) { |
| List<Cookie> list = CookieUnitTest.this.map.get(httpUrl.host()); |
| return list == null ? new ArrayList<>() : list; |
| } |
| }).build(); |
| |
| FormBody formBody = new FormBody.Builder() |
| .add("username", "自己注册") |
| .add("password", "自己注册") |
| .build(); |
| Request request = new Request.Builder() |
| .url("https://www.wanandroid.com/user/login") |
| .post(formBody).build(); |
| Call call = okHttpClient.newCall(request); |
| try { |
| Response response = call.execute(); |
| System.out.println(response.body().string()); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| |
| |
| request = new Request.Builder().url("https://www.wanandroid.com/lg/collect/list/0/json").build(); |
| call = okHttpClient.newCall(request); |
| try { |
| Response response = call.execute(); |
| System.out.println(response.body().string()); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } |
| } |
本文作者:n1ce2cv
本文链接:https://www.cnblogs.com/sprinining/p/14955091.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步