大部分網(wǎng)站的登錄是用的post請(qǐng)求焙糟,返回的內(nèi)容包含咱們需要的cookie里面的內(nèi)容。
那什么是cookie呢样屠?
當(dāng)我開(kāi)發(fā)移動(dòng)端app的時(shí)候穿撮,每次像服務(wù)器請(qǐng)求都需要發(fā)送給服務(wù)器我的賬戶名和密碼,而網(wǎng)頁(yè)開(kāi)發(fā)的時(shí)候痪欲,<b><a style= "color:red">服務(wù)器端如何驗(yàn)證你是你呢悦穿?</a></b>
這個(gè)時(shí)候就是需要cookie的時(shí)候了,當(dāng)我們?cè)跒g覽器上登錄一個(gè)網(wǎng)站之后业踢,本地并不需要保存你的賬戶名和密碼栗柒,只需要保存這個(gè)cookie就行了,你可以把它當(dāng)作一個(gè)有時(shí)間限制的門禁卡知举,當(dāng)你訪問(wèn)服務(wù)器這個(gè)房子里需要用戶登錄的門時(shí)瞬沦,只要刷一下,門就開(kāi)了雇锡。
要想模擬一加論壇的登錄逛钻,首先還有一個(gè)必不可少的操作,<a style = "color:red">抓包</a>
在Mac上我常用的抓包工具是Charles和surge锰提,windows常用的瑞士軍刀burp曙痘,當(dāng)然其實(shí)chrome和Firefox也很好用芳悲,在這里就不贅述了。
簡(jiǎn)單說(shuō)一下怎么抓包边坤,打開(kāi)<a >一加登錄頁(yè)面</a>,打開(kāi)程序點(diǎn)開(kāi)始錄制名扛,填寫一個(gè)錯(cuò)誤的密碼,抓包工具就抓到了(如上圖所示)
<b>之所以填錯(cuò)誤的密碼是為了它跳到登錄后的頁(yè)面茧痒,獲取一些無(wú)用信息肮韧。</b>
我把抓到的數(shù)據(jù)復(fù)制到了下面:
<code>
POST http://account.oneplus.cn/onepluslogin HTTP/1.1
Host: account.oneplus.cn
Proxy-Connection: keep-alive
Content-Length: 89
Accept: application/json, text/javascript, /; q=0.01
Origin: http://account.oneplus.cn
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://account.oneplus.cn/login?jump=http%3A%2F%2Fwww.oneplusbbs.com%2F&source=2
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
Cookie: *
loginName=138%40163.com&passWord=password&source=2&remember=0&channel=2&verifyCode=
</code>
咱們需要的:
方法名:<code>POST</code>
請(qǐng)求地址:<code>http://account.oneplus.cn/onepluslogin</code>
參數(shù)params:<code>loginName=138%40163.com&passWord=password&source=2&remember=0&channel=2&verifyCode=</code>
可以看出來(lái),相對(duì)于新浪微博來(lái)說(shuō)文黎,一加論壇的登錄還是挺簡(jiǎn)單的惹苗,用戶名和密碼都沒(méi)有進(jìn)行加密,直接變成參數(shù)用來(lái)請(qǐng)求耸峭。
而且經(jīng)過(guò)測(cè)試桩蓉,登錄時(shí)需要headers偽裝成瀏覽器的,大可以把headers當(dāng)作一個(gè)字典參數(shù)劳闹,而這個(gè)字典里面有些東西是必要的院究,有些不是。
咱們暫時(shí)需要的東西都找到了本涕,現(xiàn)在開(kāi)始寫python(2.7):
<code>
import httplib
import urllib
Url = "account.oneplus.cn"#HOST地址
loginUrl = "/onepluslogin"#請(qǐng)求地址拼接地址
post_data = {#請(qǐng)求體(body)业汰,包含各種參數(shù),也就是上面咱們抓到的
"loginName": "你的賬號(hào)",
"passWord": "你的密碼",
"source": 2,
"remember": 0,
"channel": 2,
"verifyCode": ""
}
headers = {#請(qǐng)求頭菩颖,經(jīng)過(guò)我測(cè)試样漆,只需要這一個(gè)參數(shù)就行了
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
}
conn = httplib.HTTPConnection(Url)
params = urllib.urlencode(post_data)#將post_data這個(gè)字典轉(zhuǎn)換成字符串
conn.request(method="POST",url=loginUrl,body=params,headers=headers);#開(kāi)始登錄
response = conn.getresponse()#response就是請(qǐng)求后返回的數(shù)據(jù)
print response.msg#打印返回的body
print response.status#打印返回的狀態(tài)碼
</code>
因?yàn)槲沂莻€(gè)小白,剛開(kāi)始寫完運(yùn)行成功我也不知道晦闰,什么也打印不出來(lái)放祟,最后打印了一下response.status發(fā)現(xiàn)狀態(tài)碼是200,然后搜索了一下呻右,才打印出了msg跪妥,這才知道是自己太笨了。