okhttp 的使用

这篇具有很好参考价值的文章主要介绍了okhttp 的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

okhttp 使用

构建post 表单请求

/**
     * 构造POST 表单请求
     * @param url url
     * @param fromParam form 表单参数
     * @param headers 自定义请求头
     * @return 响应流
     */
    @SneakyThrows
    public static Response doPostForm(String url, Map<String, Object> fromParam, Map<String, Object> headers) {
        //构造请求参数
        HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder();
        //构造请求体
        MultipartBody.Builder mBuilder = new MultipartBody.Builder();
        mBuilder.setType(MultipartBody.FORM);
        if (MapUtil.isNotEmpty(fromParam))
            fromParam.forEach((k, v) -> mBuilder.addFormDataPart(k, String.valueOf(v)));
        MultipartBody multipartBody = mBuilder.build();

        Request.Builder builder  = new Request.Builder();
        if (MapUtil.isNotEmpty(headers))
            headers.forEach((k, v) -> builder.addHeader(k, String.valueOf(v)));
        Request request = builder.url(urlBuilder.build().toString()).post(multipartBody).build();

        //发出同步请求
        return new OkHttpClient.Builder().build().newCall(request).execute();
    }

构建get请求

/**
     * 构造GET 请求
     * @param url url
     * @param param 参数map
     * @param headers 自定义请求头
     * @return 响应流
     */
    @SneakyThrows
    public static Response doGet(String url, Map<String, Object> param, Map<String, Object> headers) {
        //构造请求参数
        HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder();
        if (MapUtil.isNotEmpty(param))
            param.forEach((k, v) -> urlBuilder.addQueryParameter(k, String.valueOf(v)));

        Request.Builder builder  = new Request.Builder();
        if (MapUtil.isNotEmpty(headers))
            headers.forEach((k, v) -> builder.addHeader(k, String.valueOf(v)));
        Request request = builder.url(urlBuilder.build().toString()).get().build();

        //发出同步请求
        return new OkHttpClient.Builder().build().newCall(request).execute();
    }

构建post请求

/**
     * 构造携带accessToken POST 请求
     * @param url url
     * @param fromParam query请求参数 例:?userId=1&userName=张三
     * @param bodyParam 传参 raw格式
     * @return 响应流
     */
    @SneakyThrows
    public static Response doPost(String url, Map<String, Object> fromParam, Map<String, Object> bodyParam){
        //构造请求参数
        HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder();
        if (MapUtil.isNotEmpty(fromParam))
            fromParam.forEach((k, v) -> urlBuilder.addQueryParameter(k, String.valueOf(v)));

        //构造请求体
        RequestBody requestBody = RequestBody.
                create(MediaType.parse("application/json;charset=utf-8"), JSON.toJSONString(bodyParam));
        Request.Builder builder  = new Request.Builder();
        Request request = builder.url(urlBuilder.build().toString()).post(requestBody).build();
        //发出同步请求
        return new OkHttpClient.Builder().build().newCall(request).execute();
    }

相关导包

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.nacos.common.utils.MapUtil;
import lombok.SneakyThrows;
import okhttp3.*;
import org.apache.commons.lang3.ObjectUtils;
import java.util.Map;
import java.util.Objects;

处理Response转为JsonObject

/**
     * okhttp3 响应处理,返回jsonObject
     * @param response 响应流
     * @return JSONObject
     */
    public static JSONObject getResponseObject(Response response){
        try {
            if (response != null && response.body() != null) {
                return JSON.parseObject(response.body().byteStream(), JSONObject.class, Feature.OrderedField);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * okhttp3 响应处理
     * @param response 响应流
     * @param cls class
     * @return class
     */
    public static <T> T getResponseObject(Response response, Class<T> cls){
        try {
            if (response != null && response.body() != null) {
                return JSON.parseObject(response.body().byteStream(), cls, Feature.OrderedField);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * okhttp3 响应处理
     * @param response 响应流
     * @param cls class
     * @param feature feature
     * @return class
     */
    public static <T> T getResponseObject(Response response, Class<T> cls, Feature feature){
        try {
            if (response != null && response.body() != null) {
                return JSON.parseObject(response.body().byteStream(), cls, feature);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

忽略 ssl 证书

/**
     * 创建ssl http client
     * @return 忽略证书的https请求
     */
    public static OkHttpClient getSllHttpClient() {
        return new OkHttpClient.Builder()
                .sslSocketFactory(SSLSocketClient.getSSLSocketFactory(), SSLSocketClient.getX509TrustManager())
                .hostnameVerifier(SSLSocketClient.getHostnameVerifier())
                .build();
    }

import javax.net.ssl.*;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Arrays;

/**
 * 忽略SSL验证
 */
public class SSLSocketClient {

    //获取这个SSLSocketFactory
    public static SSLSocketFactory getSSLSocketFactory() {
        try {
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, getTrustManager(), new SecureRandom());
            return sslContext.getSocketFactory();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    //获取TrustManager
    private static TrustManager[] getTrustManager() {
        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[]{};
                    }
                }
        };
    }

    //获取HostnameVerifier
    public static HostnameVerifier getHostnameVerifier() {
        return (s, sslSession) -> true;
    }

    public static X509TrustManager getX509TrustManager() {
        X509TrustManager trustManager = null;
        try {
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init((KeyStore) null);
            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
                throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
            }
            trustManager = (X509TrustManager) trustManagers[0];
        } catch (Exception e) {
            e.printStackTrace();
        }

        return trustManager;
    }
}

文章来源地址https://www.toymoban.com/news/detail-531119.html

到了这里,关于okhttp 的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OKHTTP https 请求总是报403、404

    啥的也不说了直接上解决方法的, 在排除url写错的前提下,在原有的接口上加入user-agent的请求头信息可解决服务器的校验,代码如下 加入到httpclient里

    2024年02月15日
    浏览(40)
  • OkHttp搞定Http请求

    官方文档 仓库 OkHttp是一款高效的HTTP客户端框架: HTTP/2支持允许对同一主机的所有请求共享一个套接字。 连接池可以减少请求延迟(如果HTTP/2不可用)。 透明GZIP压缩下载大小。 响应缓存完全避免了重复请求的网络。 当网络出现问题时,OkHttp会自动恢复一般的连接问题;若服务

    2024年02月02日
    浏览(33)
  • Openfeign和okHttp的https请求忽略ssl证书认证

    在通过feign和okhttp请求外部接口时,出现了以下问题: Servlet.service() for servlet [dispatcherServlet] in context with path [/xxxx] threw exception [Request processing failed; nested exception is feign.RetryableException: java.security.cert.CertificateException: No subject alternative DNS name matching www.xx.xx.cn found. executing GET htt

    2024年02月07日
    浏览(50)
  • 深入了解 OkHttp 协议:优雅的网络请求框架

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月08日
    浏览(54)
  • 【Java EE】-HTTP请求构造以及HTTPS的加密流程

    作者 :学Java的冬瓜 博客主页 :☀冬瓜的主页🌙 专栏 :【JavaEE】 分享 : 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容 :构造http请求,不需要写代码直接发送http请求:地址栏输入地址,html中 img标签,scri

    2024年02月02日
    浏览(43)
  • 【JavaSE专栏91】Java如何主动发起Http、Https请求?

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了如何使用 Java 发起 Http 请求,并给出了样例代码,HTTP 是一种用于在 Web 浏

    2024年02月09日
    浏览(53)
  • Nginx接收Http协议请求转发使用Https协议

    公司使用阿里的apigateway,规定不太友好,同是SIT环境,A系统的SIT1环境居然不能调用B系统的SIT2环境的接口。因为各个系统之间部署的SIT环境数量不同A系统可能只有1套,B系统可能有8套,这样的话,可能会随时切换调用B系统的环境,管理员不允许,于是想着用Nginx做下转发。

    2024年02月08日
    浏览(63)
  • 深入浅出OkHttp,【带你手写】构建高效、高性能的网络请求框架

    OKHttp是一个用Java编写的网络框架,可用于 Android,以及一些基于Java的web应用开发中。它使用了HTTP/2标准的支持和连接池技术,可以让应用快速向Web服务器发送网络请求,并得到响应。OKHttp提供了一个简单的API,允许开发者发送同步或异步的HTTP请求,并处理来自Web服务器的响

    2023年04月20日
    浏览(44)
  • (下篇)java通过http请求请求三方接口:设置请求头,请求体

    介绍:springcloud项目server子模块内部集成了低代码平台来配置通用列表查询,需要对低代码配置权限,低代码使用不了server模块的feign调用,只能用http请求去调用分布式项目的用户模块来获取权限,通过restTemplate调用接口,postman携带token信息可以直接调通用户中心,但是通过

    2024年02月04日
    浏览(39)
  • java http请求设置代理 Proxy

    有如下一种需求,原本A要给C发送请求,但是因为网络原因,需要借助B才能实现,所以由原本的A-C变成了A-B-C。 这种情况,更多的见于内网请求由统一的网关做代理然后转发出去,比如你本地的机器想要对外上网,都是通过运营商给的出口IP也就是公网地址实现的。这种做法

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包