iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中的OkHttp怎么使用
  • 871
分享到

Java中的OkHttp怎么使用

2023-06-30 03:06:29 871人浏览 安东尼
摘要

今天小编给大家分享一下Java中的OkHttp怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是OKHttp一般在

今天小编给大家分享一下Java中的OkHttp怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

什么是OKHttp

一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进行处理。比如可以使用http客户端与第三方服务(如SSO服务)进行集成,当然还可以爬取网上的数据等。OKHttp与HttpClient类似,也是一个Http客户端,提供了对 HTTP/2 和 SPDY 的支持,并提供了连接池,GZIP 压缩和 HTTP 响应缓存功能;

OkHttp是目前非常火的网络库,它有以下特性:

支持HTTP/2,允许所有同一个主机地址的请求共享同一个Socket连接

连接池减少请求延时

透明的GZIP压缩减少响应数据的大小

缓存响应内容,避免一些完全重复的请求

OkHttp基本使用

  • OkHttpClient:客户端对象

  • Request:访问请求,Post请求中需要包含RequestBody

  • RequestBody:请求数据,在Post请求中用到

  • Response:即网络请求的响应结果

  • MediaType:数据类型,用来表明数据是JSON,image,pdf等一系列格式

  • client.newCall(request).execute():同步的请求方法

  • client.newCall(request).enqueue(Callback callBack):异步的请求方法,但Callback是执行在子线程中的,因此不能在此进行UI更新操作

官网:http://square.GitHub.io/okhttp/

添加依赖

 <dependency>            <groupId>com.squareup.okhttp3</groupId>            <artifactId>okhttp</artifactId>            <version>3.10.0</version>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.60</version>        </dependency>

OkHttp工具

package com.loginsimpl.utils;import com.alibaba.fastjson.JSON;import okhttp3.*;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocketFactory;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import java.io.IOException;import java.net.URLEncoder;import java.security.SecureRandom;import java.security.cert.X509Certificate;import java.util.LinkedHashMap;import java.util.Map;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;public class OkHttpUtils {    private static volatile OkHttpClient okHttpClient = null;    private static volatile Semaphore semaphore = null;    private Map<String, String> headerMap;    private Map<String, String> paramMap;    private String url;    private Request.Builder request;        private OkHttpUtils() {        if (okHttpClient == null) {            synchronized (OkHttpUtils.class) {                if (okHttpClient == null) {                    TrustManager[] trustManagers = buildTrustManagers();                    okHttpClient = new OkHttpClient.Builder()                            .connectTimeout(15, TimeUnit.SECONDS)                            .writeTimeout(20, TimeUnit.SECONDS)                            .readTimeout(20, TimeUnit.SECONDS)                            .sslSocketFactory(createSSLSocketFactory(trustManagers), (X509TrustManager) trustManagers[0])                            .hostnameVerifier((hostName, session) -> true)                            .retryOnConnectionFailure(true)                            .build();                    addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.132 Safari/537.36");                }            }        }    }        private static Semaphore getSemaphoreInstance() {        //只能1个线程同时访问        synchronized (OkHttpUtils.class) {            if (semaphore == null) {                semaphore = new Semaphore(0);            }        }        return semaphore;    }        public static OkHttpUtils builder() {        return new OkHttpUtils();    }        public OkHttpUtils url(String url) {        this.url = url;        return this;    }        public OkHttpUtils addParam(String key, String value) {        if (paramMap == null) {            paramMap = new LinkedHashMap<>(16);        }        paramMap.put(key, value);        return this;    }        public OkHttpUtils addHeader(String key, String value) {        if (headerMap == null) {            headerMap = new LinkedHashMap<>(16);        }        headerMap.put(key, value);        return this;    }        public OkHttpUtils get() {        request = new Request.Builder().get();        StringBuilder urlBuilder = new StringBuilder(url);        if (paramMap != null) {            urlBuilder.append("?");            try {                for (Map.Entry<String, String> entry : paramMap.entrySet()) {                    urlBuilder.append(URLEncoder.encode(entry.geTKEy(), "utf-8")).                            append("=").                            append(URLEncoder.encode(entry.getValue(), "utf-8")).                            append("&");                }            } catch (Exception e) {                e.printStackTrace();            }            urlBuilder.deleteCharAt(urlBuilder.length() - 1);        }        request.url(urlBuilder.toString());        return this;    }        public OkHttpUtils post(boolean isJsonPost) {        RequestBody requestBody;        if (isJsonPost) {            String json = "";            if (paramMap != null) {                json = JSON.toJSONString(paramMap);            }            requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);        } else {            FORMBody.Builder formBody = new FormBody.Builder();            if (paramMap != null) {                paramMap.forEach(formBody::add);            }            requestBody = formBody.build();        }        request = new Request.Builder().post(requestBody).url(url);        return this;    }        public String sync() {        setHeader(request);        try {            Response response = okHttpClient.newCall(request.build()).execute();            assert response.body() != null;            return response.body().string();        } catch (IOException e) {            e.printStackTrace();            return "请求失败:" + e.getMessage();        }    }        public String async() {        StringBuilder buffer = new StringBuilder("");        setHeader(request);        okHttpClient.newCall(request.build()).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                buffer.append("请求出错:").append(e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                assert response.body() != null;                buffer.append(response.body().string());                getSemaphoreInstance().release();            }        });        try {            getSemaphoreInstance().acquire();        } catch (InterruptedException e) {            e.printStackTrace();        }        return buffer.toString();    }        public void async(ICallBack callBack) {        setHeader(request);        okHttpClient.newCall(request.build()).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                callBack.onFailure(call, e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                assert response.body() != null;                callBack.onSuccessful(call, response.body().string());            }        });    }        private void setHeader(Request.Builder request) {        if (headerMap != null) {            try {                for (Map.Entry<String, String> entry : headerMap.entrySet()) {                    request.addHeader(entry.getKey(), entry.getValue());                }            } catch (Exception e) {                e.printStackTrace();            }        }    }        private static SSLSocketFactory createSSLSocketFactory(TrustManager[] trustAllCerts) {        SSLSocketFactory ssfFactory = null;        try {            SSLContext sc = SSLContext.getInstance("SSL");            sc.init(null, trustAllCerts, new SecureRandom());            ssfFactory = sc.getSocketFactory();        } catch (Exception e) {            e.printStackTrace();        }        return ssfFactory;    }    private static TrustManager[] buildTrustManagers() {        return new TrustManager[]{                new X509TrustManager() {                    @Override                    public void checkClientTrusted(X509Certificate[] chain, String authType) {                    }                    @Override                    public void checkServerTrusted(X509Certificate[] chain, String authType) {                    }                    @Override                    public X509Certificate[] getAcceptedIssuers() {                        return new X509Certificate[]{};                    }                }        };    }        public interface ICallBack {        void onSuccessful(Call call, String data);        void onFailure(Call call, String errorMsg);    }}

使用案例

发送get请求

        String sync = OkHttpUtils.builder().url("http://localhost:9100/user/all")                .addHeader("token", "xxxxxxx")                .addParam("name", "xxx").addParam("pass", "xxx")                .get()                .sync();        System.out.println(sync);

发送Post请求

        String sync = OkHttpUtils.builder().url("http://localhost:9100/user/all")                .addHeader("token", "xxxxxxx")                .addParam("name", "xxx").addParam("pass", "xxx")                .post(true) // true 为json提交方式                .sync();        System.out.println(sync);

发送异步请求

需要实现ICallBack接口

//回调实现类public class AsynchttpserviceImpl implements OkHttpUtils.ICallBack {    @Override    public void onSuccessful(Call call, String data) {        //接口正常返回的内容        System.out.println("onSuccessful"+data);    }    @Override    public void onFailure(Call call, String errorMsg) {        //接口错误返回的内容        System.out.println("onFailure"+errorMsg);    }}

发送异步请求

       OkHttpUtils.builder().url("http://localhost:9100/user/all")                .addHeader("token", "xxxxxxx")                .addParam("name", "xxx").addParam("pass", "xxx")                .post(true)                .async(new AsyncHttpServiceImpl());

以上就是“Java中的OkHttp怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Java中的OkHttp怎么使用

本文链接: https://www.lsjlt.com/news/327300.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中的OkHttp怎么使用
    今天小编给大家分享一下Java中的OkHttp怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是OKHttp一般在...
    99+
    2023-06-30
  • Java中的OkHttp使用教程
    目录什么是OKHttpOkHttp基本使用添加依赖OkHttp工具类使用案例发送get请求发送Post请求发送异步请求什么是OKHttp 一般在Java平台上,我们会使用Apache...
    99+
    2022-11-13
  • Android中OKHttp怎么使用
    OKHttp是一个开源的HTTP客户端库,用于在Android中发送和接收网络请求。下面是一个示例,展示了如何在Android中使用...
    99+
    2023-09-13
    Android
  • 怎么使用HttpClient和OkHttp
    这篇文章主要讲解了“怎么使用HttpClient和OkHttp”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用HttpClient和OkHttp”吧!使用HttpClient和OkHt...
    99+
    2023-06-16
  • java  中OkHttp的使用方法及实例
    java  中OkHttp的使用方法及实例概述准备研究Retrofit,而它是依赖OkHttp的,所以先使用一下OkHttp,不深究源码,只探究使用方法。以后有机会再翻查源码。在进行之前,首先需要2个jar包,其中一个是okHtt...
    99+
    2023-05-31
    java okhttp bs
  • 详解Java中的OkHttp JSONP爬虫
    目录什么是JSOUP什么是OkHttp爬虫需要掌握的技术需要的依赖JSON入门DemoJSOUP常用方法使用JSOUP 方式连接User-Agent(随机)后台爬虫的三大问题sele...
    99+
    2022-11-13
  • Android-Okhttp的使用解析
    okhttp是Android6.0推出的网络框架。由于谷歌在Android6.0的之后,将HttpClient相关属性取消掉,导致Volley框架不能正常使用。所以才有了今天的Okhttp。 Okhttp进行网络访问通常有两种方式...
    99+
    2023-05-31
    android okhttp roi
  • Android中怎么利用OKHTTP实现单例
    本篇文章为大家展示了Android中怎么利用OKHTTP实现单例,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android OKHTTP的单例和再封装的实例public class&nb...
    99+
    2023-05-30
    android okhttp
  • WebSocket中怎么利用OkHttp实现长连接
    WebSocket中怎么利用OkHttp实现长连接,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。WebSocket介绍先简单介绍下WebSoc...
    99+
    2022-10-19
  • Android OkHttp代理与路由怎么应用
    本文小编为大家详细介绍“Android OkHttp代理与路由怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android OkHttp代理与路由怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-05
  • Android中怎么利用OkHttp上传文件到服务器
    Android中怎么利用OkHttp上传文件到服务器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、编写服务器端在上一讲服务器下新建UploadFileServlet,代...
    99+
    2023-05-31
    okhttp android 服务器
  • Android中的Retrofit+OkHttp+RxJava缓存架构使用
    RxJava如何与Retrofit结合 先扔出build.gradle文件的内容 dependencies { compile fileTree(dir: 'libs',...
    99+
    2022-06-06
    rxjava okhttp retrofit Android 架构
  • android okhttp的基础使用【入门推荐】
    这篇文章主要总结Android著名网络框架-okhttp的基础使用,后续可能会有关于他的高级使用。 okhttp是什么 okhttp是Android端的一个Http客户端,其基...
    99+
    2022-06-06
    okhttp Android
  • 使用Postman生成的okhttp代码依赖
    目录Postman生成okhttp代码依赖使用Postman快速生成代码总结Postman生成okhttp代码依赖 <dependency>             &l...
    99+
    2023-01-09
    使用Postman Postman生成okhttp代码依赖 Postman okhttp代码依赖
  • Android OkHttp的简单使用和封装详解
    Android OkHttp的简单使用和封装详解 1,昨天把okHttp仔细的看了一下,以前都是调用同事封装好了的网络框架,直接使用很容易,但自己封装却不是那么简单,还好,今天...
    99+
    2022-06-06
    okhttp 封装 Android
  • 使用OkHttp包在Android中进行HTTP头处理的教程
    HTTP 头处理 HTTP 头是 HTTP 请求和响应中的重要组成部分。在创建 HTTP 请求时需要设置一些 HTTP 头。在得到 HTTP 的响应之后,也会需要对其中包含的 ...
    99+
    2022-06-06
    okhttp 教程 Android
  • 详解Android中使用OkHttp发送HTTP的post请求的方法
    HTTP POST 和 PUT 请求可以包含要提交的内容。只需要在创建 Request 对象时,通过 post 和 put 方法来指定要提交的内容即可。 HTTP POST 请...
    99+
    2022-06-06
    okhttp 方法 post请求 post Android
  • 怎么使用Java中的BigDecimal
    这篇文章主要介绍“怎么使用Java中的BigDecimal”,在日常操作中,相信很多人在怎么使用Java中的BigDecimal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java中的BigDeci...
    99+
    2023-06-16
  • java中的DateTime怎么使用
    这篇文章主要介绍“java中的DateTime怎么使用”,在日常操作中,相信很多人在java中的DateTime怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中的DateTime怎么使用”的疑...
    99+
    2023-06-29
  • Java中的static怎么使用
    在Java中,static关键字可以用于以下几个方面:1. 静态变量(static variables):静态变量是类的属性,而不是...
    99+
    2023-08-12
    Java static
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作