摘要:背景公司需求為導(dǎo)出在線用戶信息,其中第一步便是取到在線用戶,本文選擇去網(wǎng)頁取爬取在線用戶頁面,獲得返回報(bào)文后進(jìn)行截取獲得用戶賬號(hào)。后續(xù)方便進(jìn)行取緩存數(shù)據(jù)獲取必要的數(shù)據(jù)為導(dǎo)出做準(zhǔn)備。
背景
公司需求為導(dǎo)出在線用戶信息,其中第一步便是取到在線用戶,本文選擇去ejabberd網(wǎng)頁取爬取在線用戶頁面,獲得返回報(bào)文后進(jìn)行截取獲得用戶賬號(hào)。后續(xù)方便進(jìn)行取緩存數(shù)據(jù)獲取必要的數(shù)據(jù)為導(dǎo)出excel做準(zhǔn)備。
主要代碼 連接ejabberd,獲取返回報(bào)文/** * 請求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的響應(yīng) in = new BufferedReader(new InputStreamReader(connection.getInputStream())); while ((line = in.readLine()) != null) { reponseStr += line; } logger.info("請求回執(zhí):" + reponseStr); } catch (Exception e) { logger.error(e); } return reponseStr; }返回報(bào)文樣例
ejabberd Web Admin ejabberd (c) 2002-2017 ProcessOne, leader in messaging and push solutions
報(bào)文為頁面html,分為導(dǎo)航欄、內(nèi)容等部分,我們關(guān)注內(nèi)容部分即可;下面a標(biāo)簽內(nèi)為我們想要的在線用戶賬號(hào)(多個(gè)用戶則為多個(gè)a標(biāo)簽)
截取返回報(bào)文,獲得在線用戶賬號(hào)Jid
package com.onewaveinc.utils; //省略了import部分 ... /** * 此類原為導(dǎo)出excel表格,其中獲取在線用戶賬號(hào)為其中一步; * 從ejabberd返回報(bào)文進(jìn)行解析截取用戶賬號(hào) * @author wxin * */ public class ExportXMPPUserInfo { private UserManager userManager; private UserChannelLoginManager userChannelLoginManager; private String path; // private final static String CONNECTED_USERS ="connected_users"; /** * 加載ejabbered集群的管理頁面賬號(hào)信息至內(nèi)存 */ 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; /** * 定時(shí)導(dǎo)出XMPP每個(gè)機(jī)房(一個(gè)集群)的在線用戶的信息 * 導(dǎo)出信息:用戶賬號(hào),mac地址,登陸的IP,登陸域名,機(jī)頂盒的型號(hào),版本,和以及登陸所在節(jié)點(diǎn)的ip, * 顯示 登陸的時(shí)間,登陸的時(shí)長(現(xiàn)在的時(shí)間減去登陸的時(shí)間)。 */ 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); //獲取所有在線用戶賬號(hào) 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,在初始化階段就已經(jīng)運(yùn)行:將發(fā)送url、賬號(hào)密碼提前寫入map中。
配置...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72686.html
摘要:現(xiàn)在已經(jīng)成為的官方標(biāo)準(zhǔn),如,以及的擴(kuò)展協(xié)議。作者簡介李會(huì)軍,聯(lián)合創(chuàng)始人,關(guān)注團(tuán)隊(duì)協(xié)作領(lǐng)域,致力于用工具解決中小團(tuán)隊(duì)的協(xié)作問題。 Worktile自上線兩年多以來,以良好的用戶體驗(yàn)和穩(wěn)定的服務(wù),獲得了用戶的認(rèn)可和喜愛。截止筆者寫這篇文章的時(shí)候,已經(jīng)有超過10萬家團(tuán)隊(duì)在使用Worktile。作為團(tuán)隊(duì)協(xié)作工具,從技術(shù)上分析首先要解決如下幾個(gè)問題: 基于Web的跨平臺(tái)設(shè)計(jì),讓用戶在任何地方都...
摘要:解析的最終結(jié)果是,上下線通知。解析的結(jié)果是,同時(shí)可以通過和構(gòu)建父子級(jí)別元素。單聊發(fā)送查詢歸檔歷史記錄漫游查詢歸檔之前,首先是要確保歸檔存庫成功,服務(wù)端查看傳送門,自行處理,參見。栽過的坑轉(zhuǎn)的時(shí)候回調(diào)函數(shù)丟失參考文獻(xiàn)高級(jí)編程使用和 摘要 小編是個(gè)寫了幾年php的碼農(nóng), 接觸純Js的項(xiàng)目這也是頭一次,另外,IM的服務(wù)端是Java(tigase框架) ,為了解決舊版本BOSH(長輪詢)即時(shí)消...
摘要:本文介紹下的簡單使用。介紹本身就提供了一套算完整的,使用來實(shí)現(xiàn)的,供外部的程序調(diào)用。安裝需要安裝,然后進(jìn)行一些配置才可以正常使用,安裝方法有兩種。命令在中使用方式是客戶端方法參數(shù)例子。重啟再次測試,。 簡述 接觸了saltstack感覺十分強(qiáng)大,非常適合做自動(dòng)化運(yùn)維。本文介紹下salt-api的簡單使用。后續(xù)打算用django + saltsatck做一個(gè)web界面的自動(dòng)化運(yùn)維平臺(tái)。 ...
閱讀 1446·2021-11-24 09:39
閱讀 3626·2021-09-29 09:47
閱讀 1571·2021-09-29 09:34
閱讀 3067·2021-09-10 10:51
閱讀 2536·2019-08-30 15:54
閱讀 3216·2019-08-30 15:54
閱讀 869·2019-08-30 11:07
閱讀 1004·2019-08-29 18:36