(已解决)Java HTTP请求EMQX API

文章介绍了如何使用Java进行HTTP的Basic认证,特别是在与EMQX交互时,详细展示了在HTTP请求头中添加Authorization字段,通过Base64编码用户名和密码的过程,提供了Java原生http请求和HutoolHttp请求的示例代码。
摘要由CSDN通过智能技术生成

1.EMQX文档

参考资料:HTTP API | EMQX 4.0 文档
在这里插入图片描述

2.HTTP的Basic认证

参考资料:HTTP的几种认证方式之BASIC 认证(基本认证)
Basic认证是HTTP的一种权限校验方式。通过HTTP请求资源的响应以401状态码返回并附带Authorization Required信息,则表示请求的资源需要进行权限验证。在响应头中的WWW-Authenticate字段会写明所需认证方式(这里只讨论Basic认证方式)。

Basic认证方式需要将用户名和密码以:拼接成用户名:密码的形式,并用Base64加密后放到请求头Authorization字段中。另外需要加上Basic_(_为空格)的前缀表示使用 Basic认证,完整写法为Authorization: Basic xxxxxxxxx

3.Java发送Basic方式校权的HTTP请求

3.1未携带Basic认证

在这里插入图片描述
可以看出响应头提示我们所访问的资源需要进行权限验证,且验证方式为Basic。

3.2携带Basic认证

参考资料:java实现HTTP Basic认证
在这里插入图片描述

源码-Java原生http请求:

public static void main(String[] args) throws IOException {
	String url = "http://192.168.13.188:18083/api/v4/clients";
    URL url1 = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
    conn.setRequestMethod("GET");
    conn.setDoInput(true);
    conn.setDoOutput(true);

    String authString = "admin:public";
    byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes());
    String authStringEnc = new String(authEncBytes);
    System.out.println(authStringEnc);
    conn.setRequestProperty("Authorization", "Basic " + authStringEnc);

    conn.connect();

    int status = conn.getResponseCode();
    System.out.println("status:\t" + status);

    if (status == 200 || status == 500) {
        System.out.println("请求服务器" + (status == 200 ? "成功" : "失败"));
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String str = "";
        StringBuffer sb = new StringBuffer();
        while ((str = reader.readLine()) != null) {
            sb.append(str);
        }
        System.out.println(sb);
    }else {
        System.out.println("请求服务器失败");
    }
}

源码-Hutool Http请求:

public static void main(String[] args) {
    String url = "http://192.168.13.188:18083/api/v4/clients";

    String authString = "admin:public";
    byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes());
    String authStringEnc = new String(authEncBytes);
    System.out.println(authStringEnc);

    HttpResponse response = HttpRequest.get(url)
            .header(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc)
            .execute();

    System.out.println(response.getStatus() == 200 ? "请求成功" : "请求失败");
    System.out.println(response.body());
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值