amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks
          最近新部署了一個信息系統(tǒng),廠家居然沒有升級方案,所有數(shù)據(jù)都要重新輸入,包括用戶、角色等都要重新配置,真是操蛋。要是一個個錄入簡直是日狗了,這些用戶在其他信息系統(tǒng)早已存在,但是每個都復制粘貼提交一遍也不是辦法,于是就想用程序自動完成這些操作。步驟如下:
          1、從其他信息系統(tǒng)的數(shù)據(jù)庫導出用戶信息,也可以直接從其他信息系統(tǒng)的界面把所有用戶信息復制下來放在一個文本文件里,反正就是準備好數(shù)據(jù)源;
          2、在需要錄入用戶信息的系統(tǒng)中,用人工操作的方式登錄系統(tǒng),并錄入一個用戶,同時用Wireshark抓包,查看整個過程要提交一些什么樣的表單數(shù)據(jù);
          3、在程序中用httpclient提交同樣的數(shù)據(jù),完成登錄,并從第1步的數(shù)據(jù)源中讀取用戶信息,然后循環(huán)提交錄入用戶所需的數(shù)據(jù),完成用戶的錄入;
          4、新系統(tǒng)沒有默認的用戶角色,是需要一個個修改的,是根據(jù)用戶的ID來確定當前修改的用戶,并且提交一個角色ID來進行設定,因此需要首先獲取用戶的ID,然后根據(jù)該ID來提交角色ID,而用戶ID是通過用戶列表頁面獲取到的,因此還需要通過正則表達式來獲取所有用戶的ID,然后循環(huán)提交角色ID,完成角色設定。

          花了不少時間才搞定,有幾個地方需要注意:
          1、如果表單數(shù)據(jù)不包含中文,直接把表單的Name和Value加在HttpPost的URL的?后面即可,不需要專門建立NameValuePair,如下所示:
          HttpPost httppost = new HttpPost("http://1.1.1.1/test/adduser?userid=abc&username=efg");
          httpclient.execute(httppost);

          但是,如果表單數(shù)據(jù)包含中文,例如姓名,用這種方式提交的表單數(shù)據(jù)會出現(xiàn)亂碼,即使通過URLEncoder進行編碼后再發(fā)也不行,必須建立NameValuePair,再加到HttpPost的Entity里面,如下所示:
          HttpPost httppost = new HttpPost("http://1.1.1.1/test/adduser?userid=abc");
          List
          <NameValuePair> nvps = new ArrayList<NameValuePair>();
          nvps.add(
          new BasicNameValuePair("username","張三"));
          httppost.setEntity(
          new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
          httpclient.execute(httppost);

          2、用于網(wǎng)頁內(nèi)容查找的正則表達式的使用方式一般為:
          Pattern p = Pattern.compile(".*?abc(whattoget)123.*?");
          Matcher m = p.matcher(line);
          if(m.matches()){
               String whattoget 
          = m.group(1);
          }
          ".*?abc(whattoget)123.*?"就是一個正則表達式,如果用于匹配一行的時候,由于要查找的內(nèi)容是在行中間,所以前后需要加上.*?,表示前后可以是任意字符,也可以什么都沒有,而表達式中間的(whattoget)就表示一個group,編號為1,編號為0的group是整個匹配的字符串,找到之后提取group(1)即可得到想要的內(nèi)容。
          測試正則表達式是一項很麻煩的工作,不過有個很好的軟件可以完成此工作:RegexBuddy,支持各種語言的正則表達式的調試。
          學習正則表達式的寶典是《Mastering Regular Expression》。
          posted on 2016-01-12 15:54 amp@java 閱讀(3577) 評論(1)  編輯  收藏 所屬分類: Java common 、WEB

          評論

          # re: 用httpclient和正則表達式完成一些無聊的重復性任務[未登錄] 2016-01-16 00:03 jacky
          RegexBuddy測試正則表達式很不錯  回復  更多評論
            

          主站蜘蛛池模板: 辽阳县| 彭山县| 故城县| 五河县| 彩票| 胶南市| 来凤县| 夹江县| 晴隆县| 江川县| 易门县| 奉新县| 晋城| 甘洛县| 彝良县| 砀山县| 伊通| 青田县| 青铜峡市| 江达县| 图们市| 宜兰市| 凤凰县| 嘉峪关市| 杨浦区| 江永县| 积石山| 西乌珠穆沁旗| 山丹县| 桓仁| 吕梁市| 武川县| 鞍山市| 太仓市| 静乐县| 微博| 金沙县| 正安县| 神农架林区| 仪陇县| 东海县|