摘要:背景公司需求為導出在線用戶信息,其中第一步便是取到在線用戶,本文選擇去網頁取爬取在線用戶頁面,獲得返回報文后進行截取獲得用戶賬號。后續方便進行取緩存數據獲取必要的數據為導出做準備。
背景
公司需求為導出在線用戶信息,其中第一步便是取到在線用戶,本文選擇去ejabberd網頁取爬取在線用戶頁面,獲得返回報文后進行截取獲得用戶賬號。后續方便進行取緩存數據獲取必要的數據為導出excel做準備。
主要代碼 連接ejabberd,獲取返回報文/** * 請求ejabbered集群管理頁面的post請求方法 * * @param url * @param userNameAndPwd * @return */ public static String sendPost(String urlAddress, String userNameAndPwd) { String reponseStr = ""; BufferedReader in = null; String line = ""; try { URL url = new URL(urlAddress); URLConnection connection = url.openConnection(); logger.debug("與ejabberd建立連接的地址為:"+urlAddress); connection.setDoOutput(true); connection.setRequestProperty("Pragma:", "no-cache"); connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); connection.setRequestProperty("Cache-Control", "no-cache"); connection.setRequestProperty("Content-Type", "text/xml"); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); connection.setRequestProperty("Authorization", "Basic " + userNameAndPwd); connection.connect(); // 定義 BufferedReader輸入流來讀取URL的響應 in = new BufferedReader(new InputStreamReader(connection.getInputStream())); while ((line = in.readLine()) != null) { reponseStr += line; } logger.info("請求回執:" + reponseStr); } catch (Exception e) { logger.error(e); } return reponseStr; }返回報文樣例
ejabberd Web Admin ejabberd (c) 2002-2017 ProcessOne, leader in messaging and push solutions
報文為頁面html,分為導航欄、內容等部分,我們關注內容部分即可;下面a標簽內為我們想要的在線用戶賬號(多個用戶則為多個a標簽)
截取返回報文,獲得在線用戶賬號Jid
package com.onewaveinc.utils; //省略了import部分 ... /** * 此類原為導出excel表格,其中獲取在線用戶賬號為其中一步; * 從ejabberd返回報文進行解析截取用戶賬號 * @author wxin * */ public class ExportXMPPUserInfo { private UserManager userManager; private UserChannelLoginManager userChannelLoginManager; private String path; // private final static String CONNECTED_USERS ="connected_users"; /** * 加載ejabbered集群的管理頁面賬號信息至內存 */ private MapejabberedUserMap=new HashMap (); /** * 加載ejabbered集群的url */ private Map ejabberedUrlMap=new HashMap (); private String xmppManageListStr; private ChannelManager channelManager; private MemcachedFactory memcachedFactory; private static Logger logger = Logger.getInstance(ExportXMPPUserInfo.class); private String zipPath; /** * 定時導出XMPP每個機房(一個集群)的在線用戶的信息 * 導出信息:用戶賬號,mac地址,登陸的IP,登陸域名,機頂盒的型號,版本,和以及登陸所在節點的ip, * 顯示 登陸的時間,登陸的時長(現在的時間減去登陸的時間)。 */ public void getEjabberdJid() { try { List channelList = new ArrayList (); try { channelList = channelManager.findChannelIdList(); } catch (Exception e) { e.printStackTrace(); } String serverName = ""; String serverDomain = ""; String urlAddress = ""; String userNameAndPwd = ""; String respStr = ""; String usersUrlAddress = ""; String usersRespStr = ""; for (Channel channel : channelList) { serverName = channel.getName(); serverDomain = channel.getHost(); logger.info("此次處理的集群名稱為:" + serverName); //獲取所有在線用戶賬號 urlAddress = ejabberedUrlMap.get(serverName)+"server/"+ serverDomain +"/online-users"; userNameAndPwd = ejabberedUserMap.get(serverName); respStr = HttpUtil.sendPost(urlAddress, userNameAndPwd); List jidList = new ArrayList (); jidList = getJidList(respStr); } } catch (Exception e) { result = "failed"; e.printStackTrace(); } return result; } /** * 截取用戶jidList * @param respStr * @return List jidList */ public List getJidList(String respStr) { List jidList = new ArrayList (); int indexOne = respStr.indexOf(" Online Users
")+"Online Users
".length(); int indexTwo = respStr.indexOf("
ExportXMPPUserInfo.queryEjabberedNodes()在配置中配置為init-method,在初始化階段就已經運行:將發送url、賬號密碼提前寫入map中。
配置...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72686.html
摘要:現在已經成為的官方標準,如,以及的擴展協議。作者簡介李會軍,聯合創始人,關注團隊協作領域,致力于用工具解決中小團隊的協作問題。 Worktile自上線兩年多以來,以良好的用戶體驗和穩定的服務,獲得了用戶的認可和喜愛。截止筆者寫這篇文章的時候,已經有超過10萬家團隊在使用Worktile。作為團隊協作工具,從技術上分析首先要解決如下幾個問題: 基于Web的跨平臺設計,讓用戶在任何地方都...
摘要:解析的最終結果是,上下線通知。解析的結果是,同時可以通過和構建父子級別元素。單聊發送查詢歸檔歷史記錄漫游查詢歸檔之前,首先是要確保歸檔存庫成功,服務端查看傳送門,自行處理,參見。栽過的坑轉的時候回調函數丟失參考文獻高級編程使用和 摘要 小編是個寫了幾年php的碼農, 接觸純Js的項目這也是頭一次,另外,IM的服務端是Java(tigase框架) ,為了解決舊版本BOSH(長輪詢)即時消...
摘要:本文介紹下的簡單使用。介紹本身就提供了一套算完整的,使用來實現的,供外部的程序調用。安裝需要安裝,然后進行一些配置才可以正常使用,安裝方法有兩種。命令在中使用方式是客戶端方法參數例子。重啟再次測試,。 簡述 接觸了saltstack感覺十分強大,非常適合做自動化運維。本文介紹下salt-api的簡單使用。后續打算用django + saltsatck做一個web界面的自動化運維平臺。 ...
閱讀 1456·2021-11-24 09:39
閱讀 3635·2021-09-29 09:47
閱讀 1580·2021-09-29 09:34
閱讀 3077·2021-09-10 10:51
閱讀 2544·2019-08-30 15:54
閱讀 3224·2019-08-30 15:54
閱讀 880·2019-08-30 11:07
閱讀 1013·2019-08-29 18:36