• Http请求-hutool工具类的使用


    Http请求-hutool工具类的使用

    前言

    在日常java后端开发的工作中经常会遇到后端发起HTTP请求的情况,这里可以使用一个简单的工具类。

    官方网址:Http请求-HttpRequest (hutool.cn)

    介绍

    本质上,HttpUtil中的get和post工具方法都是HttpRequest对象的封装,因此如果想更加灵活操作Http请求,可以使用HttpRequest。

    Http请求-HttpRequest的使用

    普通表单

    我们以POST请求为例:

            //链式构建请求
            String result2 = HttpRequest.post("www.baidu.com")
                    .header(Header.USER_AGENT, String.valueOf(ContentType.FORM_URLENCODED))//头信息,多个头信息多次调用此方法即可
                    .form("paramMap")//表单内容
                    .timeout(20000)//超时,毫秒
                    .execute().body();
            Console.log(result2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过链式构建请求,我们可以很方便的指定Http头信息和表单信息,最后调用execute方法即可执行请求,返回HttpResponse对象。HttpResponse包含了服务器响应的一些信息,包括响应的内容和响应的头信息。通过调用body方法即可获取响应内容。

    看到这里你可能就会有些疑问了,那这个==.header()==是什么呢? 里面的参数又是什么呢?该如何设置呢?别着急听我慢慢道来。

    科普+学习

    首先让我们到postman看看这些,下面就header的内容了,header顾名思义就是http的请求头。用于携带一些请求格式的定义信息。

    在这里插入图片描述

    再让我们看看==Header.USER_AGENT, String.valueOf(ContentType.FORM_URLENCODED)==都是什么吧?

    Header源码:

    在这里插入图片描述

    ContentType源码:

    在这里插入图片描述

    通过hutool的源码我们可以看到,Header的本质就是一个枚举类,而我们只是拿其中已经定义好的枚举值而已,而这些枚举值就是,我们常用的一些http的请求头所需要的参数。到这里你应该也明白了,ContentType.FORM_URLENCODED就是我们所需要携带的http请求头参数的值,hutool这里也只是将它封装为一个枚举类方便调用罢了

    Restful请求

    String json = ...;
    String result2 = HttpRequest.post(url)
        .body(json)
        .execute().body();
    
    • 1
    • 2
    • 3
    • 4

    配置代理

    如果代理无需账号密码,可以直接:

    String result2 = HttpRequest.post(url)
        .setHttpProxy("127.0.0.1", 9080)
        .body(json)
        .execute().body();
    
    • 1
    • 2
    • 3
    • 4

    如果需要自定其他类型代理或更多的项目,可以:

    String result2 = HttpRequest.post(url)
        .setProxy(new Proxy(Proxy.Type.HTTP,
                    new InetSocketAddress(host, port))
        .body(json)
        .execute().body();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果遇到https代理错误Proxy returns "HTTP/1.0 407 Proxy Authentication Required",可以尝试:

    System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
    Authenticator.setDefault(
        new Authenticator() {
            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                  return new PasswordAuthentication(authUser, authPassword.toCharArray());
            }
        }
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    其它自定义项

    同样,我们通过HttpRequest可以很方便的做以下操作:

    • 指定请求头
    • 自定义Cookie(cookie方法)
    • 指定是否keepAlive(keepAlive方法)
    • 指定表单内容(form方法)
    • 指定请求内容,比如rest请求指定JSON请求体(body方法)
    • 超时设置(timeout方法)
    • 指定代理(setProxy方法)
    • 指定SSL协议(setSSLProtocol)
    • 简单验证(basicAuth方法)

    Http响应-HttpResponse的使用

    介绍

    HttpResponse是HttpRequest执行execute()方法后返回的一个对象,我们可以通过此对象获取服务端返回的:

    • Http状态码(getStatus方法)
    • 返回内容编码(contentEncoding方法)
    • 是否Gzip内容(isGzip方法)
    • 返回内容(body、bodyBytes、bodyStream方法)
    • 响应头信息(header方法)

    使用

    此对象的使用非常简单,最常用的便是body方法,会返回字符串Http响应内容。如果想获取byte[]则调用bodyBytes即可。

    获取响应状态码

    HttpResponse res = HttpRequest.post(url)..execute();
    Console.log(res.getStatus());
    
    • 1
    • 2

    获取响应头信息

    HttpResponse res = HttpRequest.post(url)..execute();
    //预定义的头信息
    Console.log(res.header(Header.CONTENT_ENCODING));
    //自定义头信息
    Console.log(res.header("Content-Disposition"));
    st(url)..execute();
    //预定义的头信息
    Console.log(res.header(Header.CONTENT_ENCODING));
    //自定义头信息
    Console.log(res.header("Content-Disposition"));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    跳表与红黑树
    java图像化界面GUI(swing)学习讲解
    面向过程程序设计——循环结构程序设计(2)
    vue3 + antdv table 展开行 expandedRowRender 根据判断条件动态显隐展开行的 icon
    Qt之普通项目如何生成DLL(含源码+注释)
    设计模式—结构型模式之桥接模式
    持续造风,快手为品牌、商家提供“保姆式”服务
    Ubuntu22.04版本侧边栏和顶部栏隐藏与其他版本不同
    第七章《Java的异常处理》第3节:异常的嵌套处理
    如何维护知乎口碑?小马识途解析知乎口碑优化的技巧
  • 原文地址:https://blog.csdn.net/Ghoul___/article/details/126509660