产品经理教你写代码【二】—批量添加多个IP到共享带宽
生活随笔
收集整理的這篇文章主要介紹了
产品经理教你写代码【二】—批量添加多个IP到共享带宽
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
引言
在第一篇博客里面提到了如何拼接出一個調(diào)用Open API的URL。
https://yq.aliyun.com/articles/225094?spm=5176.8091938.0.0.88lzXf
具備這個能力后,可以做很多事情。比如說可靈活定制的批量處理操作、或可靈活定制的監(jiān)控查詢動作。
這篇文章介紹一個批量添加EIP到共享帶寬。這個功能后續(xù)會在控制臺上線,在沒上線之前可以用本文的方法批量添加多個IP到共享帶寬。
源代碼
import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Date; import java.util.HashMap; import java.util.Arrays;import org.apache.commons.codec.binary.Base64;import java.text.SimpleDateFormat; import java.util.Map; import java.util.SimpleTimeZone; import java.util.UUID;import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec;import javax.swing.JButton; import javax.swing.JTextField; import java.awt.*;import javax.swing.*;import java.awt.event.*;public class ApiDemo extends JFrame {private static final String ENCODING = "UTF-8";private static final String ALGORITHM = "HmacSHA1";private static final String HTTP_METHOD = "GET";//不同的產(chǎn)品API version不一樣private static final String urlAPIVersion = "2016-04-28";private static final String urlSecALG = "HMAC-SHA1";private static final String urlSecVer = "1.0";private String urlAccKeyID = "";private String ulrSeckey = "";private static String urlSecNonce = UUID.randomUUID().toString();private static final String urlFromat = "xml";private String ulrTimeStamp =formatIso8601Date(new Date());private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";private static String formatIso8601Date(Date date) {SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);df.setTimeZone(new SimpleTimeZone(0, "GMT"));return df.format(date);}public void AddIpToCbwp(String strAccKeyID,String strSeckey,String StrRegion,String StrCbwpid,String strIps) throws Exception { String strcmd ="";String Ips= strIps;String[] splitAddress=Ips.split(";"); //如果以豎線為分隔符,則split的時候需要加上兩個斜杠【\\】進行轉(zhuǎn)義for (int i = 0; i < splitAddress.length; i++) {System.out.println();strcmd = "Action=AddCommonBandwidthPackageIp;RegionId=";strcmd += StrRegion;strcmd += ";BandwidthPackageId=";strcmd += StrCbwpid;strcmd += ";IpInstanceId=";strcmd += splitAddress[i];try {String strUR1 = CreatApiURL(strAccKeyID,strSeckey,strcmd);new URL(strUR1).openStream();System.out.println(" "+splitAddress[i] + " 添加成功");} catch (Exception e2) {// TODO Auto-generated catch block//e2.printStackTrace();System.out.println(" "+splitAddress[i] + " 添加失敗:已添加或不是后付費類型EIP");}}try{Thread thread = Thread.currentThread();thread.sleep(100);//暫停0.1秒后程序繼續(xù)執(zhí)行}catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}public String CreatApiURL(String strAccKeyID,String strSeckey,String strcmd) throws Exception { urlAccKeyID=strAccKeyID; ulrSeckey =strSeckey;ulrSeckey = ulrSeckey+"&";String urlNonce = UUID.randomUUID().toString();String phrase =strcmd;Date date = new Date();SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);df.setTimeZone(new SimpleTimeZone(0, "GMT"));ulrTimeStamp = df.format(date);Map<String, String> parameters = new HashMap<String, String>(); // 加入公共請求參數(shù)parameters.put("Format", urlFromat);parameters.put("Version", urlAPIVersion);parameters.put("SignatureMethod", urlSecALG);parameters.put("SignatureNonce", urlNonce);parameters.put("SignatureVersion", urlSecVer);parameters.put("AccessKeyId", urlAccKeyID);parameters.put("Timestamp", ulrTimeStamp);String delims1 = ";";String[] tokens1 = phrase.split(delims1);for (int i = 0; i < tokens1.length; i++){String delims2 = "=";String[] tokens2 = tokens1[i].split(delims2);parameters.put(tokens2[0], tokens2[1]);}// 對參數(shù)進行排序String[] sortedKeys = parameters.keySet().toArray(new String[]{});Arrays.sort(sortedKeys);final String SEPARATOR = "&";// 生成stringToSign字符串StringBuilder stringToSign = new StringBuilder();stringToSign.append(HTTP_METHOD).append(SEPARATOR);String value = "/";try {value = URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") ;} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}stringToSign.append(value).append(SEPARATOR);StringBuilder canonicalizedQueryString = new StringBuilder();for(String key : sortedKeys) {// 這里注意對key和value進行編碼 String value1 = key;try {value1 = URLEncoder.encode(value1, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") ;} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String value2 = parameters.get(key);try {value2 = URLEncoder.encode(value2, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") ;} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}canonicalizedQueryString.append("&").append(value1).append("=").append(value2);}// 這里注意對canonicalizedQueryString進行編碼String value3 = canonicalizedQueryString.toString().substring(1);try {value3 = URLEncoder.encode(value3, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") ;} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}stringToSign.append(value3);Mac mac = null;try {mac = Mac.getInstance(ALGORITHM);} catch (NoSuchAlgorithmException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}try {mac.init(new SecretKeySpec(ulrSeckey.getBytes(ENCODING), ALGORITHM));} catch (InvalidKeyException | UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}byte[] signData = null;try {signData = mac.doFinal(stringToSign.toString().getBytes(ENCODING));} catch (IllegalStateException | UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String signature = new String(Base64.encodeBase64(signData));value = signature;try {value = URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") ;} catch (UnsupportedEncodingException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String urlSignature = value;StringBuilder urlReq = new StringBuilder();//vpc的調(diào)用入口,如果是云監(jiān)控的入口,則是http://metrics.cn-beijing.aliyuncs.com/的形式urlReq.append("https://vpc.aliyuncs.com"); urlReq.append("?Signature=");urlReq.append(urlSignature);for(String key : sortedKeys) {urlReq.append("&").append(key).append("=").append(parameters.get(key));}System.out.println(urlReq.toString()); return urlReq.toString();}public ApiDemo() throws Exception { setSize(500,800);setLayout(new FlowLayout(FlowLayout.CENTER,10,30));JPanel panel=new JPanel();JTextField textField_AccID=new JTextField(30);JTextField textField_Acckey=new JTextField(30);JTextField textField_region=new JTextField(30);JTextField textField_cbwpid=new JTextField(30);JTextArea textArea_ip=new JTextArea(10,30);JButton button=new JButton(" 批量添加IP到共享帶寬 ");JLabel AccID=new JLabel("請輸入Access Key ID:");JLabel AccKey=new JLabel("請輸入Access Key Secret:");JLabel Region=new JLabel("請輸入共享帶寬包region,如 cn-beijing ");JLabel Cbwpid=new JLabel("請輸入帶寬包實例ID:如 cbwp-2zetu1kb5ek9lwjspo3yl ");JLabel Ips=new JLabel("請輸入要加入共享帶寬的IP實例ID,如有多個請用英文分號;分隔");JLabel Ips2=new JLabel("如eip-2zexs2h1lscs4ljccpigh;eip-2zew4iuvcnvr0e7cew7rx ");// JLabel URLResult=new JLabel(" Open API URL生成結(jié)果: ");button.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自動生成的方法存根urlAccKeyID=textField_AccID.getText(); ulrSeckey =textField_Acckey.getText();String strRegion = textField_region.getText();String strCbwpid = textField_cbwpid.getText();String strIPs = textArea_ip.getText();try {AddIpToCbwp(urlAccKeyID,ulrSeckey,strRegion,strCbwpid,strIPs);} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}} });getContentPane().add(panel);getContentPane().add(AccID);getContentPane().add(textField_AccID);getContentPane().add(AccKey);getContentPane().add(textField_Acckey);getContentPane().add(Region);getContentPane().add(textField_region);getContentPane().add(Cbwpid);getContentPane().add(textField_cbwpid);getContentPane().add(Ips);getContentPane().add(Ips2);getContentPane().add(textArea_ip);getContentPane().add(button);// getContentPane().add(URLResult);//getContentPane().add(textField_URL);setLocationRelativeTo(null);setVisible(true);setDefaultCloseOperation(3); }public static void main(String[] args) throws Exception {ApiDemo API_GEN = new ApiDemo(); }}程序界面
這個是一個以圖形化界面來展示拼接URL的小程序
程序界面
附件提供可運行的程序。
通過命令行終端啟動可以看到debug信息。
總結(jié)
以上是生活随笔為你收集整理的产品经理教你写代码【二】—批量添加多个IP到共享带宽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取12个月前的日期,PHP 19
- 下一篇: 74ls161中rco是什么_74ls1