OkHttp3Util_03

Minio新版(RELEASE.2024-03)部署与Java/Python SDK连接超时配置全指南 本文详细介绍了Minio新版(RELEASE.2024-03)在Linux和Docker环境下的部署步骤,并重点解析了Java/Python SDK连接超时时间的配置方法。通过实战示例和性能调优建议,帮助开发者解决文件对象丢失等常见问题,提升Minio在生产环境中的稳定性和可靠性。 阅读详情
package com.lbp.jingdong3.utils;

import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * Created by Dash on 2017/12/8.
 *
 * 公共参数封装分为两种方式....source=android,,,appVersion=100
 *      一:封装到doGet和doPost方法中
 *
 *
 *      二:封装到拦截器(interceptor):拦截一个请求,然后添加参数进去
 */
public class OkHttp3Util_03 {


    /**
     * 懒汉 安全 加同步
     * 1.私有的静态成员变量 只声明不创建
     * 2.私有的构造方法
     * 3.提供返回实例的静态方法
     */
    private static OkHttpClient okHttpClient = null;


    private OkHttp3Util_03() {
    }

    public static OkHttpClient getInstance() {

        if (okHttpClient == null) {
            //加同步安全
            synchronized (OkHttp3Util_03.class) {
                if (okHttpClient == null) {
                    //okhttp可以缓存数据....指定缓存路径
                    File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
                    //指定缓存大小
                    int cacheSize = 10 * 1024 * 1024;

                    okHttpClient = new OkHttpClient.Builder()//构建器
                            .connectTimeout(15, TimeUnit.SECONDS)//连接超时
                            .writeTimeout(20, TimeUnit.SECONDS)//写入超时
                            .readTimeout(20, TimeUnit.SECONDS)//读取超时

                            .addInterceptor(new CommonParamsInterceptor())//添加应用拦截器的方法

                            .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))//设置缓存
                            .build();
                }
            }

        }

        return okHttpClient;
    }

    /**
     * get请求
     * 参数1 url
     * 参数2 回调Callback
     *
     * oldUrl表示老的地址,,,是没封装公共参数之前的地址....公共参数指的是source=android
     *
     */

    public static void doGet(String oldUrl, Callback callback) {


        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();
        //创建Request
        Request request = new Request.Builder().url(oldUrl).build();
        //得到Call对象
        Call call = okHttpClient.newCall(request);
        //执行异步请求
        call.enqueue(callback);//异步执行..子线程不会阻塞...excute同步执行...阻塞线程


    }

    /**
     * post请求
     * 参数1 url
     * 参数2 Map<String, String> params post请求的时候给服务器传的数据
     *      add..("","")
     *      add()
     */

    public static void doPost(String url, Map<String, String> params, Callback callback) {

        //创建OkHttpClient请求对象
        OkHttpClient okHttpClient = getInstance();
        //3.x版本post请求换成FormBody 封装键值对参数

        FormBody.Builder builder = new FormBody.Builder();
        //遍历集合,,,map集合遍历方式
        for (String key : params.keySet()) {
            builder.add(key, params.get(key));

        }


        //创建Request....formBody...new formBody.Builder()...add()....build()
        Request request = new Request.Builder().url(url).post(builder.build()).build();

        Call call = okHttpClient.newCall(request);
        call.enqueue(callback);

    }
    /**
     * 封装公共参数的拦截器
     */
    private static class CommonParamsInterceptor implements Interceptor{

        //intercept方法就是拦截的意思....拦截的是一个请求,,,一旦拦截之后可以对请求的参数进行处理
        //Chain chain 链条的意思
        @Override
        public Response intercept(Chain chain) throws IOException {

            Log.e("----","拦截器------");

            //调用request()方法得到拦截的请求
            Request request = chain.request();

            //获取请求的方式
            String method = request.method();//GET POST
            //拦截的请求的路径
            String oldUrl = request.url().toString();

            //要添加的公共参数...map
            Map<String,String> map = new HashMap<>();
            map.put("source","android");

            if ("GET".equals(method)){
                StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder...字符串缓冲区

                stringBuilder.append(oldUrl);

                if (oldUrl.contains("?")){
                    //?在最后面....2类型
                    if (oldUrl.indexOf("?") == oldUrl.length()-1){

                    }else {
                        //3类型...拼接上&
                        stringBuilder.append("&");
                    }
                }else {
                    //不包含? 属于1类型,,,先拼接上?号
                    stringBuilder.append("?");
                }

                //添加公共参数....source=android&appVersion=100&
                for (Map.Entry<String,String> entry: map.entrySet()) {
                    //拼接
                    stringBuilder.append(entry.getKey())
                            .append("=")
                            .append(entry.getValue())
                            .append("&");
                }

                //删掉最后一个&符号
                if (stringBuilder.indexOf("&") != -1){
                    stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
                }
                //得到含有公共参数的新路径.....使用新路径去请求
                String newUrl = stringBuilder.toString();

                //新的路径构建一个新的请求
                request = request.newBuilder().url(newUrl).build();

            }else if ("POST".equals(method)){
                Log.e("--oldUrl--",oldUrl);
                //参数在请求的实体内容上....拿到以前的参数,把以前的参数和公共参数全都添加到请求实体上
                RequestBody requestBody = request.body();
                if (requestBody instanceof FormBody){//前边是不是后边的子类/实例对象
                    FormBody oldBody = (FormBody) requestBody;//keywords...page

                    FormBody.Builder builder = new FormBody.Builder();

                    //先添加之前的参数
                    for (int i = 0;i<oldBody.size();i++){
                        //键值对的形式添加
                        builder.add(oldBody.name(i),oldBody.value(i));
                    }
                    //添加公共参数
                    for (Map.Entry<String,String> entry: map.entrySet()) {

                        builder.add(entry.getKey(),entry.getValue());

                    }

                    //构建一个新的请求
                    request = request.newBuilder().url(oldUrl).post(builder.build()).build();


                }

            }


            //执行请求 获取到响应
            Response response = chain.proceed(request);
            return response;
        }
    }

}

Android应用Root检测绕过实战:Frida动态Hook与逆向分析 在移动应用安全领域,逆向工程与动态分析是理解应用安全机制的核心技术。其基本原理是通过分析应用代码逻辑,在运行时修改关键函数行为,从而绕过安全检测。这项技术的价值在于帮助安全研究人员评估应用防护强度,发现潜在漏洞。在实际应用场景中,金融类APP常部署多层防护机制,包括Java层和Native层的Root检测。通过Frida等动态注入工具,可以Hook关键检测函数,篡改返回值,实现环境伪装。本文聚焦于Root检测绕过,详细介绍了从静态分析定位检测点到动态Hook修改逻辑的完整流程,并分享了Frida脚本编写与反 阅读详情

相关推荐

程序员必知的时间单位换算:从秒到纳秒的实战指南

时间单位换算是计算机科学和软件工程中的基础概念,涉及秒、毫秒、微秒、纳秒等不同精度单位的转换。其核心原理基于国际单位制,通过固定的换算比率(如1000倍或60倍)在不同精度级别间转换。掌握这一原理对于编写健壮、高效的代码至关重要,能有效避免因单位混淆导致的隐蔽Bug,如定时任务异常、接口超时错误和数据库查询错乱等。在实际应用中,这一技术广泛应用于系统监控、性能分析、API接口设计以及分布式系统协调等场景。本文聚焦于**时间单位换算**这一关键点,通过**Java的TimeUnit枚举**等实用工具,为开发者

weixin_30588675的博客 360

某手App签名机制剖析:从Java层okhttp到so层CPU.a的sig生成链路

本文深度解析某手App的签名机制,从Java层okhttp拦截到Native层CPU.a动态库的sig生成全链路。详细剖析了参数预处理、JNI桥接设计及Native层加密算法,揭示其分层安全架构如何有效抵御中间人攻击。特别关注__NS_sig3等关键参数在安全矩阵中的作用,为移动安全工程师提供实用分析框架。

weixin_30352645的博客 400

JDK26模块化实战:jlink精简镜像与jpackage云原生打包

Java模块化是自JDK9引入的核心架构演进,其本质是通过显式依赖声明和强封装机制重构JVM类加载逻辑,提升启动性能、内存效率与部署安全性。随着JDK26将JLink设为默认构建环节、JPackage强制输出app-image格式,模块化已从可选特性升级为云原生Java应用的交付基础设施。技术价值体现在三方面:启动耗时降低70%+、运行时内存峰值压缩至1/4、Docker镜像体积减少60%以上;典型应用场景包括边缘计算(如蓝牙控灯软件)、微服务容器化部署及多版本共存的企业级开发环境(如Hadoop+实时计算

weixin_33800463的博客 437

OkHttp3Utils工具类

注意事项: 1、异常处理部分请大家根据项目结构自行调整 2、提供简单同步GET和POST方法 3、主要Maven依赖 <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.14.7</version> </dependency> import okhttp3.*; im

Dylan Lin的博客 2045

Android代码-OkHttp3Utils

OkHttp3Utils OkHttp3.0封装框架,内部使用gson解析json数据 项目地址:https://github.com/open-android/OkHttp3Utils 简书:http://www.jianshu.com/p/e9258c1bc5ce 爱生活,爱学习,更爱做代码的搬运工,分类查找更方便请下载黑马助手app 使用步骤 1. 在project的build.gradle添加如下代码(如下图) allprojects { repositories { ... maven { url "https://jitpack.io"

你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号

功能强大 管理便捷—给您全新的路由体验 一键更换指定线路or批量更换所有IP/MAC/SSID 自定义走本地网络策略的分流功能 设备批发价、不限制拨号账号服务商 强大的单设备/多设备IP去重功能 批量导入、管理一号通线路 一键任意切换5G_WiFi(推荐)/2.4G_WiFi(建议不用) 设备支持PPTP/L2TP/SSTP/openVP.N等协议 独家支持openVPN,适用于网络受限用户 支持自行接入AP和交换机扩容 一键打开/关闭所有虚拟WiFi 一键隐藏/显示设备WiFi...

米粒儿 4253

(Java)高性能Http框架:OKHttp3的工具类OkHttp3Utils实现(可使用Http代理)

目录前言实现OkHttp3Utils(主类)ProxyDO(代理实体) 前言 网上的类似工具类已经很多了,自己优化了一些,希望大家多多给到意见 实现 OkHttp3Utils(主类) 说明一下几个特殊类,可以在实际使用过程中按需替换 SkynetUtils:封装了公司内部日志系统日志记录功能的实现类(记录日志) EnumSkynetCategoryPublicUtils(记录日志用) EnumS...

SuperWei的博客 4669

Fiddler everywhere的一些基础操作

网上能搜到的Fiddler everywhere使用教程太少,于是我整理了一些自己实操成功的内容,包括Fiddler everywhere的Mock测试、弱网测试等基础操作,后续还会持续更新。操作系统:macOS使用工具:Fiddler everywhere 5.10.0本文简单介绍了使用Fiddler everywhere进行的Mock测试和弱网测试,而Fiddler everywhere提供了更多的其他实用的功能,我会在后期进行一个持续的学习和更新。

weixin_44346646的博客 2478

一个完整封装的 OkHttp3 工具类

OkHttp3 封装

白高林的专栏 2124

【UE5+Quest3】手部模型替换---3-0

这次手部模型替换遇到了一些小问题,不过好在是bug一个个都处理掉了,我会分开几个章节去整理。详细的视频教程可以参考油管大佬的视频手部素材放到文章末尾,自行下载使用。(仅用作学习研究,不可用于商用)

qbbmnnnnnn的博客 944

similarity network fusion for aggregating data types on a genomic scale

基因组规模上的聚合数据类型的相似性网络融合 摘要:         近期的技术已经使收集不同类型的全基因组数据十分划算,结合这些数据去创建一个给定的疾病或生物过程的一个全面视图的计算方法是有必要的。相似网络融合(SNF:similarity network fusion)通过创建每一个可利用的数据类型的样本(如,患者)的网络可以解决这个问题。例如,创建一个给定一群患者疾病的全面视图,SNF计算

augustar学习笔记 7869

OKUtils

public class OkHttp3Util_03 {    /**     * 懒汉 安全 加同步     * 1.私有的静态成员变量 只声明不创建     * 2.私有的构造方法     * 3.提供返回实例的静态方法     */    private static OkHttpClient okHttpClient = null;    private OkHttp3Util_03()...

pizifusheng的博客 1138

Fluent基于低氧舱气体交换仿真(氮气与空气混合)

一、背景概述 模拟低氧舱充氮气和排除混合气体的过程,假设注入95%的氮气,舱内原有气体为空气,压力为标准大气压,温度为300K。观察气体注入过程中,舱内平均氮气和氧气浓度的变化。 二、Fluent设置 Setup 1、General type选择压力基 绝对速度 瞬态 重力勾选 2、Model 能量方程开启 组分运输开启,设置方法如下: 选择后OK,view就会变成Edit,点击Edit。然后再次点击Edit。 将组分中的非氮气氧气和空气的气体移除,右边选项需要将空气放在最后一位。 3、Materi

qq_35535616的博客 1万+

OkHTTP基本使用

GET请求 private void okHttpget(String url) { //创建client对象 OkHttpClient client = new OkHttpClient.Builder() //设置连接超时时间 .callTimeout(5, TimeUnit.SECONDS) //设置读取超时时间 .readTimeout(5, TimeUnit.SECONDS) //创建O...

weixin_45480648的博客 399

X书关键词协议搜索

【代码】X书关键词协议搜索。

Codeooo 博客 6377

SpringBoot实战教程-springboot概论

Spring Boot 是一个快速开发框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,以及自动配置。内置web容器,帮助开发者能够实现快速开发,简化了应用系统的初始搭建以及开发过程。

鸟哥哥的专栏 4155

分类中的util

ApiUtil: public class ApiUtil { private static final String BASE_URL = "https://www.zhaoapi.cn/"; //首页 public static final String HOME_URL = BASE_URL+"ad/getAd"; //分类 public stat

Cf1035630950的博客 487

第10集:AIOps 平台架构设计!画出面试官最想看的系统全景图

本文介绍了如何将AIOps平台的六大功能模块整合为四层架构设计,并生成专业系统全景图。文章首先指出面试中架构设计能力的重要性,强调一张清晰的架构图能直观展现全局观。随后指导读者检查项目结构,准备绘图环境。核心部分详细拆解了四层架构:数据采集层(Prometheus、ELK等)、AI分析层(巡检、告警、预测等)、决策执行层(工作流引擎、自愈Agent)和展示交互层(API、控制台)。通过Python代码自动生成模块依赖关系图,并提供了面试讲解技巧。全文旨在帮助开发者在面试中系统性地展示项目架构设计能力。

qq_2937655951的博客 92

banner

SwitchButton package com.dash.a03_custom_view_02.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.C

shaoyanyu的博客 309

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringBoot 集成okHttp报错 kotlin.collections.ArraysKt.copyInto([B[BIII)[B问题解决

排查发现,是因为SpringBoot中内置的版本号和okhttp3中的不一致导致的,且是以SpringBoot中的优先。在父pom文件中引入这两个包,就不会用SpringBoot内置版本的包了。SpringBoot引入okHttp3。okhttp3中引入的包。

李洪亮的博客 1132

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

逆向工程实战:Frida动态Hook解析TikTok Protobuf数据

在网络通信与数据序列化领域,Protocol Buffers(Protobuf)作为一种高效、跨平台的二进制序列化协议,因其体积小、解析快的特点,被广泛应用于微服务通信和高性能移动应用中。其核心原理是通过预定义的.proto文件生成序列化/反序列化代码,实现结构化数据的紧凑传输。在数据抓取与逆向工程场景中,当面对像TikTok这样使用Protobuf进行核心API通信的应用时,直接获取到的二进制数据流无法直接解读,这构成了主要的技术挑战。此时,动态插桩技术(如Frida)的价值得以凸显,它允许在不修改目标应

weixin_30906185的博客 529

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

点击上传头像

//bean/ Uptoupackage com.example.shangchauntouxaing.bean; /** * Created by Administrator on 2018/2/5. */ public class Uptou { /** * msg : 文件格式不正确 * code : 1 */ private Strin...

Gybk123的博客 1211

Java实现微信小程序AES-128-CBC数据解密:原理、避坑与Spring Boot集成实战

AES(高级加密标准)是一种广泛使用的对称加密算法,其CBC(密码分组链接)模式通过引入初始化向量(IV)增强了安全性,是保障数据传输机密性的核心技术。在Java生态中,javax.crypto库为AES加解密提供了标准实现,其技术价值在于为开发者构建安全、可靠的数据交换通道提供了基础工具。这一技术广泛应用于需要处理敏感信息的场景,例如用户身份认证、支付数据传输等。微信小程序在获取用户手机号等敏感信息时,便采用了AES-128-CBC模式结合PKCS#7填充对数据进行加密,以确保信息在传输过程中的安全。本文

weixin_34289454的博客 431

Android 随笔集 By tuliyuan

1.反射机制调用系统服务EthernetManager private void getNetInfo(Context context) { try { // Log.d(TAG, "dddd getNetInfo is " ); Method getServiceMethod = Class.forName("android.os.ServiceManager").getDeclaredMethod("getService", new Cla

qq_18906227的博客 2279

从抓包到算法还原:逆向分析Android App的AES请求体加密实战

在移动应用安全与数据通信领域,加密技术是保障传输数据机密性与完整性的核心手段。对称加密算法AES因其高效和安全性被广泛应用,其工作原理是将明文数据分块,通过密钥和特定运算模式(如ECB、CBC)转换为密文。理解加密原理对于进行安全审计、协议分析或兼容性开发具有重要价值。在实际的Android应用逆向工程场景中,开发者常会使用代码混淆、加固等手段保护核心逻辑,这为分析工作带来了挑战。本次实战通过结合静态分析与动态调试,完整还原了一个航空类App中AES-ECB模式请求体加密的实现细节,重点演示了在遇到代码抽取

weixin_34174105的博客 325
上一篇: mvp中model获取请求数据的工具类
下一篇: 无错误日志的时候 建议的使用解决办法
忙着写BUG
博客等级 码龄9年 11粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值