首页 > 其他分享 >JDK调用工具(一)

JDK调用工具(一)

时间:2024-07-15 17:55:01浏览次数:7  
标签:调用 请求 JDK url Request OkHttpClient OkHttp new 工具

1. HttpURLConnection

HttpURLConnection 是 Java 提供的一个用于发送 HTTP 请求和接收 HTTP 响应的类。它位于 java.net 包中,用于建立与 HTTP 服务器的连接,并支持通过 GET、POST 等方法发送请求,并获取服务器的响应。使用示例如下:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class JDKHttpUtil {
    private static final String EXAMPLE_URL = "http://www.example.com";
    public static void main(String[] args) throws Exception {
        // 1、获取HttpURLConnection
        URL url = new URL(EXAMPLE_URL);
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        httpURLConnection.setRequestMethod("GET");

        // 2、设置请求内容
        httpURLConnection.setRequestProperty("Accept", "application/json");
        httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");
        httpURLConnection.setInstanceFollowRedirects(true);
        httpURLConnection.setConnectTimeout(5000);
        httpURLConnection.setReadTimeout(10000);

        // 3、发送请求
        httpURLConnection.connect();

        // 4、处理结果
        int responseCode = httpURLConnection.getResponseCode();
        if (responseCode == 200) {
            // TODO 自定义序列化工具处理响应
            BufferedReader in = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine).append("\r");
            }
            in.close();
            System.out.println("Response Body: " + response);
        }

        // 5、断开连接
        httpURLConnection.disconnect();
    }
}

使用注意事项:

①资源释放: 使用完毕后应调用 disconnect方法断开连接,释放资源。

②异常处理: 调用 openConnection(和操作连接时都可能抛出 IOException,应进行适当的异常处理。

③性能考虑: 对于大量的 HTTP 请求,考虑连接池或者复用 HttpURLConnection 实例以提升性能。

出于性能和请求定制考虑,直接使用HttpURLConnection的情况非常少见。常用OkHttp或者HttpClient替代。

2. OkHttp

OkHttp是一款高效的HTTP客户端,适用于Android和Java应用,是一款由Square公司贡献的开源的网络请求的轻量级框架。OkHttp提供了丰富的功能和灵活性,‌以满足各种复杂的网络请求需求。

①OkHttp 提供了现代化的、易于理解和使用的 API 设计。它使用 Builder 模式来构建请求和配置客户端,使得代码清晰、可读性强。

②OkHttp 支持 HTTP/2 和 SPDY,能够提升网络请求的效率和性能。

③OkHttp 自动管理连接池,减少了重复连接和请求的开销,提高了网络请求的效率。

④OkHttp 提供了拦截器机制,允许开发者在发送请求前和收到响应后执行自定义的逻辑,如添加公共参数、日志记录等。

⑤OkHttp 提供了丰富的配置选项,可以调整超时时间、缓存设置、重试策略等,以满足各种复杂的网络请求需求。

⑥开发者可以选择发送同步或异步的网络请求,灵活应对不同的需求场景。

⑦OkHttp 是开源的,社区活跃,可以通过扩展和定制来满足特定的需求,例如支持自定义的协议或认证方式。

OkHttp基本使用示例如下:

import okhttp3.*;
import org.jetbrains.annotations.NotNull;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;

public class OKHttpExample {
    private static final String EXAMPLE_URL = "http://www.example.com";
    private static final String EXAMPLE_FILE_PATH = "http://www.example.com/1.jpg";
    public static void main(String[] args) throws Exception {
        // OkHttp使用建造者模式构建OkHttpClient、Request、ReqeuestBody
        // 1、GET请求
        OkHttpClient okHttpClient1 = new OkHttpClient();
        Request getRequest = new Request.Builder().url(EXAMPLE_URL).get().build();
        Call getCall = okHttpClient1.newCall(getRequest);
        Response getResponse = getCall.execute();
        if (getResponse.isSuccessful()){
            // TODO 自定义序列化工具处理响应
            BufferedReader in = new BufferedReader(new InputStreamReader(getResponse.body().byteStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine).append("\r");
            }
            in.close();
            System.out.println("Response Body: " + response);
        }

        // 2、POST请求
        OkHttpClient okHttpClient2 = new OkHttpClient();
        RequestBody body = new FormBody.Builder().add("name", "xuyuan").build();
        Request postRequest = new Request.Builder().url(EXAMPLE_URL).post(body).build();
        Call postCall = okHttpClient2.newCall(postRequest);
        Response postResponse = postCall.execute();
        //TODO .......

        //3、构建定制化配置的OkHttpClient对象,全局设置
        OkHttpClient okHttpClient3 = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .addInterceptor(chain -> {
                    Request req = chain.request();
                    String url = req.url().toString();
                    System.out.println("intercept: proceed start: url"+ url+ ", at "+System.currentTimeMillis());
                    Response rep = chain.proceed(req);
                    ResponseBody repBody = rep.body();
                    System.out.println("intercept: proceed end: url"+ url+ ", at "+System.currentTimeMillis());
                    return rep;
                })
                .build();

        //4、单次请求定制化配置
        Request request3 = new Request.Builder()
                .url("www.baidu.com")
                .post(null)
                .addHeader("key","value")
                .cacheControl(CacheControl.FORCE_CACHE)
                .build();


        // 5、异步请求发送
        Call call1 = okHttpClient3.newCall(request3);
        call1.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 {

            }
        });

        // 6、取消请求,根据业务场景使用。取消的时候,很有可能已经发出了请求,取消也只是逻辑上的取消,物理上发送了请求
        call1.cancel();

        // 7、上传文件
        OkHttpClient okHttpClient4 = new OkHttpClient();
        MediaType contentType = MediaType.parse("application/json;charset=utf-8");
        RequestBody requestBody4 = RequestBody.create(contentType, "example");
        Request request4 = new Request.Builder().post(requestBody4).url(EXAMPLE_URL).build();
        Call call4 = okHttpClient4.newCall(request4);
        Response response4 = call4.execute();

        // 8、上传Multiparty 文件
        OkHttpClient okHttpClient5 = new OkHttpClient();
        MediaType contentType5 = MediaType.parse("text/x-markdown;charset=utf-8");
        RequestBody requestBody5 = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("title", "example")
                .addFormDataPart("image", "1.jpg", RequestBody.create(contentType5, new File(EXAMPLE_FILE_PATH)))
                .build();
        Request request = new Request.Builder().url(EXAMPLE_URL).post(requestBody5).build();
        Call call = okHttpClient5.newCall(request);

    }
}

标签:调用,请求,JDK,url,Request,OkHttpClient,OkHttp,new,工具
From: https://blog.csdn.net/pig_Struggle/article/details/140438158

相关文章

  • 【笔记】Nmap工具原理探索
    【笔记】Nmap工具原理探索原文章:【THM】Nmap(Nmap工具使用简介)-学习-Hekeatsll-博客园(cnblogs.com)Nmap是一款跨平台的开源端口扫描软件,它用来扫描计算机的开放端口,以确定运行的网络服务,并推断出计算机运行的操作系统Nmap三种基本扫描类型TCP连接扫描(-sT)工作原理:通过......
  • 免费可视化工具如何打造动态销售管理看板?
    在这个数据驱动的时代,销售管理不再仅仅依赖于传统的报表和口头汇报,而是越来越倾向于直观、动态的可视化展示。可视化工具的出现,无疑为中小企业乃至大型企业提供了强大的助力,帮助销售团队构建高效、直观的销售管理看板,让数据说话,决策有据可依。 今天要说的是,如何利用免费工具—......
  • Microsoft Office 自定义安装部署工具 | Mocreak
    软件简介:Mocreak是一款一键自动化下载、安装、部署正版Office的办公增强工具。该工具完全免费、无广告、绿色、无毒、简约、高效、安全。软件特点:一键快速下载、安装、部署最新版MicrosoftOffice软件。提供简约、高效,且可自定义的图形界面,提升部署效率。支持将Office安......
  • mysql备份还原——binlog查看工具之show binlog的使用
    (4.8)mysql备份还原——binlog查看工具之mysqlbinlog及showbinlog的使用关键词:showbinlog,mysqlbinlog查看,二进制文件查看,binlog查看工具,binlog查看方法 0、使用showmasterstatus; 使用它可以直接查看binlog日志信息;总结:指定文件:showbinlogeventsin'b......
  • 东南亚最神秘的国家,去老挝旅游需要准备什么翻译工具呢?《老挝语翻译通》App帮助你在老
    东南亚神秘国家:老挝。一个充满魅力的东南亚国家,其独特的文化和语言吸引着世界各地的旅行者和语言爱好者。为了帮助大家更好地了解和学习老挝语,我们推出了《老挝语翻译通》App,一款集翻译、学习、旅游于一体的多功能工具。功能亮点实时翻译:中文翻译老挝语,双语互译,让沟通无障碍......
  • 快速指南:软件缺陷管理工具的选择技巧
    国内外主流的10款软件缺陷管理工具软件对比:PingCode、Worktile、禅道、Tapd、Teambition、Tower、JIRA、Bugzilla、MantisBT、Trac。在软件开发过程中,管理缺陷和漏洞常常成为一项挑战,尤其是在项目规模庞大时。选择一个高效的软件缺陷管理工具不仅可以提升开发效率,还能确保产品......
  • 小工具:用于Windows平台的网速监控悬浮窗软件 - 用于Windows平台的网速监控悬浮窗软件
    介绍TrafficMonitor是一款用于Windows平台的网速监控悬浮窗软件,可以显示当前网速、CPU及内存利用率,支持嵌入到任务栏显示,支持更换皮肤、历史流量统计等功能。官网国内https://gitee.com/zhongyang219/TrafficMonitor全球网络https://github.com/zhongyang219/TrafficMonito......
  • [Web] 接口文档工具: Swagger
    0引言1springboot整合swagger2,并配置密码登录认证依赖引入spring-boot.version:2.3.12.RELEASEswagger.version:1.5.14springfox-swagger2.version:2.8.0<!--swagger|start--><!--springfox-swagger2:内部依赖/自动引入swagger-annotations/swagger......
  • 精准搜索:本地文件检索工具的高效策略
    背景背景1:在日常的工作中,本地磁盘随着工作时间的变长,新建的目录会越来越多存放的文件也越来越多;每次想要找一个文件,确实要浪费一点时间,本着让时间更高效的原则,想着如果借助程序去检索那是不是更快些,于是有了下边的实践。背景2:保险的销售人员也就是业务老师,由于资料过多,找起来确......
  • AI绘画Stable Diffusion 零基础入门 —AI 绘画原理与工具介绍,万字解析AI绘画的使用教
    大家好,我是设计师阿威想要入门AI绘画,首先需要了解它的原理是什么样的。其实很早就已经有人基于深度学习模型展开了对图像生成的研究了,但在那时,生成的图像分辨率和内容都非常抽象。直到近两年,AI产出的图像内容的质量变高、而且有一定的艺术价值,这时它才算正式拥有了理......