java实现RestApi接口的调用,解决调用权限
本人在研究apache atlas时参考官方api文档进行api接口调用时遇到一个问题:浏览器调用接口会自动跳转到atlas的登录页面,如果不登录没办法调用api:
经过学习了解,可以在调用接口的时候在请求头设置一个key,这个key包含登录的账号和密码,具体方法如下:
private static String getAuthorization() {BASE64Encoder encoder = new BASE64Encoder();String auth = username + ":" + password;String base64 = encoder.encode(auth.getBytes());return "Basic " + base64;}
其中,username和password是登录的账号和密码,BASE64Encoder 需要导入sun.misc.BASE64Decoder.jar,请自行下载导入,然后在请求头设置:
URL serverUrl = new URL(url);HttpURLConnection connection = (HttpURLConnection) serverUrl.openConnection();connection.setRequestMethod("GET");connection.setRequestProperty("Authorization", getAuthorization());
这样就能调用api解决权限问题,完整的java代码如下:
package api_test;import java.io.BufferedReader;import java.io.InputStreamReader;import .HttpURLConnection;import .URL;import Decoder.BASE64Encoder;/*** @Author:* @Date: /1/9 11:12*/public class HttpClientTest {private static String getAuthorization() {BASE64Encoder encoder = new BASE64Encoder();String auth = "admin" + ":" + "admin";String base64 = encoder.encode(auth.getBytes());return "Basic " + base64;}public static void main(String[] args) throws Exception {String url="http://192.168.3.64:21000/api/atlas/v2/lineage/6fa88134-ab3e-4db9-8907-947e4fc17b88";URL serverUrl = new URL(url);HttpURLConnection connection = (HttpURLConnection) serverUrl.openConnection();connection.setRequestMethod("GET");connection.setRequestProperty("Authorization", getAuthorization()); if (connection.getResponseCode() != 200) {throw new RuntimeException("HTTP GET Request Failed with Error code : "+ connection.getResponseCode());}BufferedReader responseBuffer = new BufferedReader(new InputStreamReader((connection.getInputStream())));System.out.println("Output from Server: \n");String output;while ((output = responseBuffer.readLine()) != null) {System.out.println(output);}connection.disconnect();}}
以上是通过java实现的,这里提一下postman测试,如图所示,输入用户名和密码 ,再进行测试