<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    amp@java

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

    花了不少時(shí)間才搞定,有幾個(gè)地方需要注意:
    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ù)會(huì)出現(xiàn)亂碼,即使通過URLEncoder進(jìn)行編碼后再發(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)容查找的正則表達(dá)式的使用方式一般為:
    Pattern p = Pattern.compile(".*?abc(whattoget)123.*?");
    Matcher m = p.matcher(line);
    if(m.matches()){
         String whattoget 
    = m.group(1);
    }
    ".*?abc(whattoget)123.*?"就是一個(gè)正則表達(dá)式,如果用于匹配一行的時(shí)候,由于要查找的內(nèi)容是在行中間,所以前后需要加上.*?,表示前后可以是任意字符,也可以什么都沒有,而表達(dá)式中間的(whattoget)就表示一個(gè)group,編號(hào)為1,編號(hào)為0的group是整個(gè)匹配的字符串,找到之后提取group(1)即可得到想要的內(nèi)容。
    測(cè)試正則表達(dá)式是一項(xiàng)很麻煩的工作,不過有個(gè)很好的軟件可以完成此工作:RegexBuddy,支持各種語言的正則表達(dá)式的調(diào)試。
    學(xué)習(xí)正則表達(dá)式的寶典是《Mastering Regular Expression》。
    posted on 2016-01-12 15:54 amp@java 閱讀(3576) 評(píng)論(1)  編輯  收藏 所屬分類: Java common 、WEB

    評(píng)論

    # re: 用httpclient和正則表達(dá)式完成一些無聊的重復(fù)性任務(wù)[未登錄] 2016-01-16 00:03 jacky
    RegexBuddy測(cè)試正則表達(dá)式很不錯(cuò)  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲av无码片vr一区二区三区| 日本牲交大片免费观看| 久久精品国产亚洲av高清漫画| 久久久精品免费国产四虎| 亚洲美女又黄又爽在线观看| 成人网站免费大全日韩国产| 在线亚洲精品自拍| 好男人资源在线WWW免费| 国产亚洲AV夜间福利香蕉149| 韩国免费A级毛片久久| 亚洲精品tv久久久久久久久| 国产一区二区三区免费| 亚洲AV无码第一区二区三区| 免费无码成人AV在线播放不卡| 久久精品国产亚洲AV无码娇色| 亚洲免费在线视频播放| 亚洲乱码中文字幕小综合| 成人免费看片又大又黄| 亚洲.国产.欧美一区二区三区| 五月婷婷亚洲综合| 成人免费777777被爆出| 亚洲av无码无在线观看红杏| 久久ww精品w免费人成| 亚洲欧洲春色校园另类小说| 男人的好看免费观看在线视频| 亚洲欧美日韩综合久久久久| 四虎国产精品免费久久影院| 久久www免费人成看国产片| 亚洲av无码潮喷在线观看| 亚洲免费观看在线视频| 亚洲欧洲无码AV不卡在线| 吃奶摸下高潮60分钟免费视频| 人体大胆做受免费视频| 亚洲一区二区女搞男| 久久精品无码专区免费青青| 亚洲男人天堂2018av| 国产免费一区二区三区VR| 国产免费AV片在线观看播放| 亚洲精品线在线观看| 国产大片线上免费观看| 国产亚洲视频在线观看网址|