張慧的博客

          張慧的博客

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(14)

          我參與的團(tuán)隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          本文主要用python實現(xiàn)了對網(wǎng)站的模擬登錄。通過自己構(gòu)造post數(shù)據(jù)來用Python實現(xiàn)登錄過程。

          當(dāng)你要模擬登錄一個網(wǎng)站時,首先要搞清楚網(wǎng)站的登錄處理細(xì)節(jié)(發(fā)了什么樣的數(shù)據(jù),給誰發(fā)等...)。我是通過HTTPfox來抓取http數(shù)據(jù)包來分析該網(wǎng)站的登錄流程。同時,我們還要分析抓到的post包的數(shù)據(jù)結(jié)構(gòu)和header,要根據(jù)提交的數(shù)據(jù)結(jié)構(gòu)和heander來構(gòu)造自己的post數(shù)據(jù)和header。

          分析結(jié)束后,我們要構(gòu)造自己的HTTP數(shù)據(jù)包,并發(fā)送給指定url。我們通過urllib2等幾個模塊提供的API來實現(xiàn)request請求的發(fā)送和相應(yīng)的接收。
          大部分網(wǎng)站登錄時需要攜帶cookie,所以我們還必須設(shè)置cookie處理器來保證cookie。

          具體代碼和講解如下

          1. #!/usr/bin/python  
          2.   
          3. import HTMLParser  
          4. import urlparse  
          5. import urllib  
          6. import urllib2  
          7. import cookielib  
          8. import string  
          9. import re  
          10.   
          11. #登錄的主頁面  
          12. hosturl = '******' //自己填寫  
          13. #post數(shù)據(jù)接收和處理的頁面(我們要向這個頁面發(fā)送我們構(gòu)造的Post數(shù)據(jù))  
          14. posturl = '******' //從數(shù)據(jù)包中分析出,處理post請求的url  
          15.   
          16. #設(shè)置一個cookie處理器,它負(fù)責(zé)從服務(wù)器下載cookie到本地,并且在發(fā)送請求時帶上本地的cookie  
          17. cj = cookielib.LWPCookieJar()  
          18. cookie_support = urllib2.HTTPCookieProcessor(cj)  
          19. opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  
          20. urllib2.install_opener(opener)  
          21.   
          22. #打開登錄主頁面(他的目的是從頁面下載cookie,這樣我們在再送post數(shù)據(jù)時就有cookie了,否則發(fā)送不成功)  
          23. h = urllib2.urlopen(hosturl)  
          24.   
          25. #構(gòu)造header,一般header至少要包含一下兩項。這兩項是從抓到的包里分析得出的。  
          26. headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1',  
          27.            'Referer' : '******'}  
          28. #構(gòu)造Post數(shù)據(jù),他也是從抓大的包里分析得出的。  
          29. postData = {'op' : 'dmlogin',  
          30.             'f' : 'st',  
          31.             'user' : '******', //你的用戶名  
          32.             'pass' : '******', //你的密碼,密碼可能是明文傳輸也可能是密文,如果是密文需要調(diào)用相應(yīng)的加密算法加密  
          33.             'rmbr' : 'true',   //特有數(shù)據(jù),不同網(wǎng)站可能不同  
          34.             'tmp' : '0.7306424454308195'  //特有數(shù)據(jù),不同網(wǎng)站可能不同  
          35.   
          36.             }  
          37.   
          38. #需要給Post數(shù)據(jù)編碼  
          39. postData = urllib.urlencode(postData)  
          40.   
          41. #通過urllib2提供的request方法來向指定Url發(fā)送我們構(gòu)造的數(shù)據(jù),并完成登錄過程  
          42. request = urllib2.Request(posturl, postData, headers)  
          43. print request  
          44. response = urllib2.urlopen(request)  
          45. text = response.read()  
          46. print text  

          posted on 2012-08-01 21:42 張慧 閱讀(61098) 評論(11)  編輯  收藏

          Feedback

          # re: python實現(xiàn)模擬登錄[未登錄] 2013-09-17 15:18 edison
          很好  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2013-10-27 15:15
          你好,請問下,postdata和headers提交時應(yīng)該怎么判斷提交那些信息啊?不同網(wǎng)站除了用戶名和密碼外還有其他信息,如何判斷提交的信息能實現(xiàn)模擬登陸呢?  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2014-01-15 23:30 保永志
          進(jìn)入  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2014-04-12 15:13 sunshinelyc
          你好,我想問一下,你的postData里面:
          'op' : 'dmlogin',
          'f' : 'st',
          'user' : '******', //你的用戶名
          'pass' : '******', //你的密碼,密碼可能是明文傳輸也可能是密文,如果是密文需要調(diào)用相應(yīng)的加密算法加密
          'rmbr' : 'true', //特有數(shù)據(jù),不同網(wǎng)站可能不同
          'tmp' : '0.7306424454308195' //特有數(shù)據(jù),不同網(wǎng)站可能不同
          去哪里來的呢。我在httpfox里面只能找到user和password。謝謝回復(fù)  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2014-06-03 08:59 ontseason
          @sunshinelyc
          抓包,用chrome的開發(fā)人員工具審查元素...network里
            回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2014-08-01 23:09 yu
          如果是驗證用戶名是否重復(fù)咋個實現(xiàn)  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2014-10-01 11:54 jzp113
          你好,我按照你的方法進(jìn)行了模擬登錄,能登錄成功。但是我用burpsuit 抓包時發(fā)現(xiàn)沒有cookie這內(nèi)容。但是我開啟debuglog 又在header里面發(fā)現(xiàn)了這個cookie。
          然后我又再次發(fā)送了個get請求,當(dāng)卻不成功  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2014-10-20 13:55 Warmer
          頁面有checkbox的話,怎么模擬?  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄[未登錄] 2015-05-16 09:47 1
          可以轉(zhuǎn)載么  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2015-11-17 15:35 zhangyan
          dgrhtr  回復(fù)  更多評論
            

          # re: python實現(xiàn)模擬登錄 2015-11-17 15:35 zhangyan
          fegerh  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 耿马| 云南省| 东平县| 阳春市| 山东| 昌宁县| 广丰县| 贺州市| 阿克陶县| 唐山市| 南京市| 汝阳县| 公安县| 绥阳县| 荥经县| 蒙山县| 扶绥县| 遂平县| 汝城县| 灌云县| 河东区| 苏尼特左旗| 星子县| 任丘市| 永宁县| 兴文县| 安吉县| 大庆市| 古丈县| 互助| 高密市| 兰州市| 盘锦市| 澄江县| 彰武县| 苍溪县| 安宁市| 左贡县| 前郭尔| 白沙| 达日县|