这两天一直在调试EMQ的API,通过HTTP的GET请求,可以查询到订阅列表信息,在浏览器中测试时,需要输入用户名和密码,然后才能显示出结果,输错或者不输入会返回401错误。
通过浏览器输入用户名和密码没有问题,但是如果使用Java通过后台发送HTTP请求,在什么地方输入用户名和密码呢?
经过大量的查找资料发现,EMQ的API调用采用了Basic认证。这块怪自己知识太浅,有经验的人应该一眼就能看出来。
这里对Basic认证的原理 就不说了,网上有很多资料。
采用Basic认证时,需要在header中设置Authorization字段。代码如下:
public static String doGet(String urlStr){ try{ URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setDoOutput(true); String authString = "admin:public"; byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); String authStringEnc = new String(authEncBytes); conn.setRequestProperty("Authorization", "Basic " + authStringEnc); //设置Authoriization字段 conn.connect(); int status = conn.getResponseCode(); System.out.println(status); if(status == 200){ BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String str = ""; StringBuffer sb = new StringBuffer(); while((str=reader.readLine()) != null){ sb.append(str); } return sb.toString(); } System.out.println("请求emq服务失败"); }catch(Exception e){ e.printStackTrace(); } return "error"; }