抓取qq邮箱联系人
今天是:2010-03-14 ,紀念昨晚熬到3點!
題外話:模擬登陸請求頁面這次我用了httpclient4.0,也順便學習一下,4.0跟以前的版本用法上有很大的不同,具體情況Google一下就知道了,個人覺得知道原理就行了,至于開發包只要能實現目的用那個版本自己決定,這里不多說。
?
言歸正傳:
Step1、抓取登陸頁:http://mail.qq.com/cgi-bin/loginpage?
目的:獲取表單提交的action和用于加密密碼的ts值
注意:這里獲取到得action有兩個用途
???????????1、當然是提交表單
???????????2、抽出domain用于組裝驗證碼請求url,因為驗證碼分布在多臺機器,某臺機器只能驗證這臺機器的驗證碼(所以一些舊的文章關于驗證碼獲取的url不能用了)
補充:主頁還有個rsa的公鑰PublicKey,我直接拷貝出來使用,其他則用正則拿。
Step2、請求驗證碼:"http://"+domain+"/cgi-bin/getverifyimage?aid=23000101&"+Math.random()
注意:返回的驗證碼附上了cookie:authimgs_id和verifyimagesession(以前好像叫verifysession),所以拿驗證碼的時候必須把它們(不要漏了authimgs_id)保存下來,因為登陸請求的
?????????? 時候?要用到。
Setp3、填充表單:
sid=0,2,zh_CN (默認值)
firstlogin=false?? (默認值)
starttime= (請求時間:js中: (new Date()).valueOf() ; java中:Long.toString(System.currentTimeMillis()))
redirecturl= (默認為空)
f=html (默認值)
p= (加密后的秘密:如果是jdk6.0可以調用存放rsa加密函數的js文件(好像是這個safeauth9206l.js,我是jdk5.0環境,所以未試過這種方法)來加密)
delegate_url= (默認為空)
s= (默認為空)
ts= (上面抓取首頁的時候已獲取)
from= (默認為空)
ppp = (默認為空)
chg = 1 (不用理,就填1好了)
checkisWebLogin = (當前日期所在一周中的第幾天再乘3,例如:今天是星期日就是0*3=0,昨天是6*3=18)
uin= (qq號)
pp= (將原始密碼的每一個字符替換為0,即密碼長度個0組成的字符串)
verifycode=驗證碼(setp2已拿到)
aliastype=@qq.com?(其他未試過)
表單填好了,就可以進入下一步,在這里推薦一個軟件:charles,用這個東西可以看到頁面http請求的細節,用來分析request and response非常方便
Setp4、登陸
提交表單前記得將setp2拿到的cookie放到請求header里,至于header還需不需要設其他值,個人水平有限,I don't?know ~~!,我的做法反正在charles上看到的都弄上去應該沒錯
提交失敗將返回錯誤頁(errtype=1:密碼錯誤、2:驗證碼錯誤、17:登陸太多次),否則返回一個跳轉頁,將跳轉頁上的urlHeader, sid , r三個 值拿下來重新組裝進入首頁的url
例如:http://m87.mail.qq.com/cgi-bin/frame_html?sid=0tMsQPhQJlbKWUsA&r=0f5b1e1f4898062431d5c1d21cbd244d
記得保存urlHeader (含有主頁用到的域名信息)和 sid 獲取聯系人的時候要用到
Setp5、獲取聯系人
組裝獲取聯系人分組列表頁面的url :urlHeader+"addr_listall?sid="+_sid+"&sorttype=null&category=common"
例如:http://m87.mail.qq.com/cgi-bin/addr_listall?sid=0tMsQPhQJlbKWUsA&sorttype=null&category=common
進入了分組頁,也就得到了進入每一組的url,進去拿就是了!
?
#補充一下個人的一些理解:上面整個過程必須保證始終使用同一個httpclient對象,httpclient隱性地為我們完成了session維持的工作!
(有理解錯的,請大俠們指出以便修正,俺水平低下但好學~~)
#這里不提供源碼,因為qq郵箱稍有改動,程序就可能用不了,關鍵是思路!以不變應萬變~~
參考資料:
http://www.cnblogs.com/huangcheng/archive/2009/09/14/1566198.html
http://blog.csdn.net/gtuu0123/archive/2009/11/14/4809431.aspx
??????????
@QQ郵箱改用https協議了,而且郵箱聯系人那個頁面該版了,不過稍作改動,程序仍然可用 (2010-06-26)
???????????
轉載于:https://www.cnblogs.com/nicholas_f/archive/2010/03/14/1685647.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: javascript冷门吗_分享几个ht
- 下一篇: 工具栏自定义_EXCEL LESSON1