OpenDayLight 氢版本 RestAPI 调用实例(1)-拓扑的获取(Java)
2016-11-16 13:22
573 查看
本篇博文主要讲述如何使用Java调用OpenDayLight的RestAPI
要点
1.Python版本的代码可读性比较好,详见Python版本
2.本项目在GitHub上持续更新,项目地址,欢迎Fork
3.本项目的代码由3个文件组成:
HttpRequest.java 主要完成Http请求,集成了Basic Auth
Main.java 主类,调用的入口
OdlUtil.java 封装了对于OpenDayLight的调用的逻辑
4.Java版的博文更新的速度不会很快,如有问题请在下方留言
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(分割线)代码如下:
Main.javaimport java.util.Base64; public class Main { public static void main(String[] args) { // write your code here //System.out.print(Base64.getEncoder().encodeToString(("admin" + ":" + "123456").getBytes())); OdlUtil odlUtil = new OdlUtil("127.0.0.1",8080); odlUtil.getTopology(); } }
OdlUtil.java
import java.util.Base64; /** * Created by dxc on 16-11-15. */ public class OdlUtil { private String url = ""; public OdlUtil(String host,int port){ this.url = "http://" + host + ":" + port; } public String getTopology(){ return getTopology("default"); } public String getTopology(String containerName, String username, String password) { HttpRequest.setBasicAuth(getBasicAuthStr(username,password)); String str = HttpRequest.sendGet(url + "/controller/nb/v2/topology/" + containerName,""); System.out.print(str); return null; } public String getTopology(String containerName){ getTopology(containerName, "admin","admin"); return null; } private String getBasicAuthStr(String name,String password){ return "Basic " + Base64.getEncoder().encodeToString((name + ":" + password).getBytes()); } }
HttpRequest.java
package com.example.odlutil; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public class HttpRequest { private static String basicAuth = null; public static void setBasicAuth(String str){ HttpRequest.basicAuth = str; } /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { return sendGet(url, param, "utf-8"); } /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @param charSet * 网页编码 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param,String charSet) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); if(basicAuth !=null){ connection.setRequestProperty("Authorization", basicAuth); } // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { //System.out.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream(),charSet)); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param){ return sendPost(url, param, "utf-8"); } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @param charSet * 网页编码 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param,String charSet) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); if(basicAuth !=null){ conn.setRequestProperty("Authorization", basicAuth); } // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(),charSet)); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } }
调用Main,输出样例结果
{“edgeProperties”:[{“properties”:{“timeStamp”:{“value”:1479271548637,”name”:”creation”},”bandwidth”:{“value”:10000000000},”name”:{“value”:”s2-eth3”},”state”:{“value”:1},”config”:{“value”:1}},”edge”:{“tailNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:01”,”type”:”OF”},”id”:”1”,”type”:”OF”},”headNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:02”,”type”:”OF”},”id”:”1”,”type”:”OF”}}},{“properties”:{“timeStamp”:{“value”:1479271548657,”name”:”creation”},”bandwidth”:{“value”:10000000000},”name”:{“value”:”s1-eth2”},”state”:{“value”:1},”config”:{“value”:1}},”edge”:{“tailNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:03”,”type”:”OF”},”id”:”2”,”type”:”OF”},”headNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:01”,”type”:”OF”},”id”:”2”,”type”:”OF”}}},{“properties”:{“timeStamp”:{“value”:1479271548638,”name”:”creation”},”bandwidth”:{“value”:10000000000},”name”:{“value”:”s1-eth1”},”state”:{“value”:1},”config”:{“value”:1}},”edge”:{“tailNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:02”,”type”:”OF”},”id”:”1”,”type”:”OF”},”headNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:01”,”type”:”OF”},”id”:”1”,”type”:”OF”}}},{“properties”:{“timeStamp”:{“value”:1479271548658,”name”:”creation”},”bandwidth”:{“value”:10000000000},”name”:{“value”:”s3-eth3”},”state”:{“value”:1},”config”:{“value”:1}},”edge”:{“tailNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:01”,”type”:”OF”},”id”:”2”,”type”:”OF”},”headNodeConnector”:{“node”:{“id”:”00:00:00:00:00:00:00:03”,”type”:”OF”},”id”:”2”,”type”:”OF”}}}]}相关文章推荐
- OpenDayLight 氢版本 RestAPI 调用实例(1)-拓扑的获取(Python)
- OpenDayLight 氢版本 RestAPI 调用实例(2)-主机信息获取(Java)
- OpenDayLight 氢版本 RestAPI 调用实例(2)-主机信息获取(Python)
- OpenDayLight 氢版本 RestAPI 调用实例(3)-下发流表(Java)
- OpenDayLight 氢版本 RestAPI 调用实例(3)-下发流表(Python)
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- 使用Java调用ElasticSearch提供的相关API进行数据搜索完整实例演示
- Java反射特性--获取其他类实例并调用其方法
- java微信开发API解析(三)-高级功能的前奏----获取以及保存接口调用凭证 标签: 微信java办微信开发微信文档解析 2016-04-06 20:50 1101人阅读 评论(0) 收藏 举报
- J2ME 调用faceapi 的API Java版本
- 使用Java调用ElasticSearch提供的相关API进行数据搜索完整实例演示
- 在Java程序中调用Salesforce REST API
- 基于JAVA的货币汇率api调用代码实例
- 使用Java调用ElasticSearch提供的相关API进行数据搜索完整实例演示
- ES2.x版本的javaAPI使用实例
- java微信开发API第三步 微信获取以及保存接口调用凭证
- java根据ip地质调用百度定位api服务获取地理位置示例