实战:第二十五章:HttpUtil代理

简介: 实战:第二十五章:HttpUtil代理
package com.common.entity.utils;
import okhttp3.*;
import org.springframework.http.HttpStatus;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.util.concurrent.TimeUnit;
/**
 * @author zhiwei Liao
 * @version 1.0
 * @Date 2021/5/8 17:20
 */
public class HttpUtil {
    private static OkHttpClient client;
    private static final String DEFAULT_MEDIA_TYPE = "application/json; charset=utf-8";
    private static final int CONNECT_TIMEOUT = 15;
    private static final int READ_TIMEOUT = 17;
    private static final String GET = "GET";
    private static final String POST = "POST";
    /**
     * 单例模式  获取类实例
     *
     * @return client
     */
    private static OkHttpClient getInstance() {
        if (client == null) {
            synchronized (OkHttpClient.class) {
                if (client == null) {
                    client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
                            .build();
                }
            }
        }
        return client;
    }
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{\"messages\":[{\"from\":\"bamboo8\",\"destinations\":[{\"to\":\"0086 17717299170\"}],\"text\":\"1234 is your verification code\"}]}");
        Request request = new Request.Builder()
                .url("https://qgk983.api.infobip.com/sms/2/text/advanced")
                .method("POST", body)
                .addHeader("Authorization", "Basic cWlhbmd5dTpxdWFkdGFsZW50QEI4")
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .build();
        try {
            Response response = client.newCall(request).execute();
            ResponseBody responseBody = response.body();
            String result = responseBody.string();
            System.out.println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static String doGet(String url) throws Exception{
        try {
            long startTime = System.currentTimeMillis();
            Request request = new Request.Builder().url(url).build();
            // 开启代理
            String proxyHost = "127.0.0.1";
            String proxyPort = "7890";
            System.setProperty("http.proxyHost", proxyHost);
            System.setProperty("http.proxyPort", proxyPort);
            System.setProperty("https.proxyHost", proxyHost);
            System.setProperty("https.proxyPort", proxyPort);
            // 创建一个请求
            Response response = getInstance().newCall(request).execute();
            int httpCode = response.code();
            String result;
            ResponseBody body = response.body();
            if (body != null) {
                result = body.string();
                addResponseLog(httpCode, result, startTime);
            } else {
                throw new Exception("exception in OkHttpUtil,response body is null");
            }
            return handleHttpResponse(httpCode, result);
        } catch (Exception ex) {
            throw new Exception("http请求异常");
        }
    }
    public static String doPost(Request request) throws Exception{
        try {
            long startTime = System.currentTimeMillis();
            // 开启代理
//            String proxyHost = "127.0.0.1";
//            String proxyPort = "7890";
//            System.setProperty("http.proxyHost", proxyHost);
//            System.setProperty("http.proxyPort", proxyPort);
//            System.setProperty("https.proxyHost", proxyHost);
//            System.setProperty("https.proxyPort", proxyPort);
            // 创建一个请求
            Response response = getInstance().newCall(request).execute();
            int httpCode = response.code();
            String result;
            ResponseBody body = response.body();
            if (body != null) {
                result = body.string();
                addResponseLog(httpCode, result, startTime);
            } else {
                throw new Exception("exception in OkHttpUtil,response body is null");
            }
            return handleHttpResponse(httpCode, result);
        } catch (Exception ex) {
            throw new Exception("http请求异常");
        }
    }
    private static void addResponseLog(int httpCode, String result, long startTime) {
        long endTime = System.currentTimeMillis();
    }
    private static String handleHttpResponse(int httpCode, String result) throws Exception {
        if (httpCode == HttpStatus.OK.value()) {
            return result;
        }
        throw new Exception("invalid_token");
    }
    private static void handleHttpThrowable(Exception ex, String url) throws Exception {
        if (ex instanceof Exception) {
            throw (Exception) ex;
        }
        if (ex instanceof SocketTimeoutException) {
            throw new RuntimeException("request time out of OkHttp when do url:" + url);
        }
        throw new RuntimeException(ex);
    }
}
相关文章
|
12月前
|
XML Java 数据格式
Spring框架(二) 底层架构核心概念解析-四万字你值得一看
上面说到解析为BeanDefintion之后会注册到Spring容器中 , 那么什么是容器? 其实在DefaultListableBeanFactory这个类中就有体现 , 源码中是这样定义的
85 0
|
2月前
|
缓存 负载均衡 应用服务中间件
【揭秘】nginx代理配置全攻略:从零到精通,一文带你玩转高效网络代理的秘密武器!
【8月更文挑战第22天】nginx是一款高性能的HTTP与反向代理服务器,支持代理服务、负载均衡及缓存等功能,有助于提升网站响应速度和安全性。首先需确保已安装nginx,可通过包管理器进行安装。安装后启动并确认nginx运行状态。接着编辑配置文件(通常位于`/etc/nginx/nginx.conf`),设置代理转发规则,例如指定目标服务器地址和请求头信息。配置完成后测试有效性并重新加载nginx以应用更改。可以通过部署简易HTTP服务器验证代理功能是否正常工作。此外,还可以通过扩展配置文件实现更复杂的代理需求,如基于路径的代理和SSL加密等。
297 2
|
2月前
|
设计模式 测试技术
"揭秘!Service层接口之谜:你的项目究竟该不该‘接口化’?一文带你走出设计迷雾!"
【8月更文挑战第11天】在软件开发中,分层设计确保了项目的清晰与可维护性。Service层作为核心,其是否应实现接口一直是热议话题。支持者认为接口能解耦系统、便于测试并提供灵活性;反对者则担心增加复杂度与冗余。通过示例对比直接实现与基于接口的设计,本文探讨了不同场景下的最佳实践,强调设计应根据项目规模与需求权衡,旨在实现架构的平衡。
36 4
|
5月前
|
数据采集 搜索推荐 数据安全/隐私保护
使用httpx异步获取高校招生信息:一步到位的代理配置教程
2024年中国高考临近,考生需及时获取高校招生信息。使用Python httpx库的异步功能可提高爬虫效率,尤其在处理大量请求时。结合爬虫代理IP,能避免IP封禁,确保数据抓取的连续性。文章介绍了招生趋势、特点,如多样化政策、多平台信息发布、个性化招生等,并提供了使用httpx异步请求和代理的代码示例,帮助开发者高效抓取高校专业与课程设置。
使用httpx异步获取高校招生信息:一步到位的代理配置教程
|
5月前
|
数据采集 存储 Java
Java爬虫与SSL代理:实际案例分析与技术探讨
Java爬虫与SSL代理:实际案例分析与技术探讨
|
安全 搜索推荐 数据挖掘
区块链分红代理系统开发逻辑部署-附源码规则示例
区块链分红代理系统开发逻辑部署-附源码规则示例
|
10月前
|
数据采集 存储 监控
用快代理给某红薯做数据采集,该怎么做?
一起来看看,如何利用快代理来采集某书的数据。
|
缓存 负载均衡 Kubernetes
如何设计一个安全的对外接口,老司机总结了这几点
博主之前做过恒丰银行代收付系统(相当于支付接口),包括现在的oltpapi交易接口和虚拟业务的对外提供数据接口。总之,当你做了很多项目写了很多代码的时候,就需要回过头来,多总结总结,这样你会看到更多之前写代码的时候看不到的东西,也能更明白为什么要这样做。
|
移动开发 前端开发 JavaScript
【浅入浅出】前端单页面路由实现原理
【浅入浅出】前端单页面路由实现原理
136 0
【浅入浅出】前端单页面路由实现原理
|
测试技术 Python
【第五篇-完结篇】XiaoZaiMultiAutoAiDevices之改造扩展
在前面系列文章中有讲到,使用configparser,ini格式的文件作为配置文件,在新增或者删除其中的值时,会丢失所有注释,所以在框架源码注释中我有写到,如果对这方面比较介意或者是有需求的话,可以进行更改配置文件。
124 0
下一篇
无影云桌面