Python模擬登陸(urllib2)

歡迎轉載,轉載請註明原文地址:http://blog.csdn.net/majianfei1023/article/details/49888757

最近需要做個自動化工具,需要自動登錄某個網站然後自動進行某些操作,免除人工一個一個操作的煩惱。
第一步就是要登錄網站,而目前主流網站的登陸過程大同小異。於是乎,我就拿了人人網(www.renren.com)來試手。至於爲什麼用它,因爲很多網站的登陸過程太複雜了,它稍微簡單點。

主要用python實現了對網站的模擬登錄。需要自己構造數據接口,這就需要抓包看登陸的時候到底發了什麼數據。
firefox有一個很好用的工具HTTPfox來抓取http數據包,主要看url,postdata,header,cookie,user-agent等數據。

我們要構造自己的HTTP數據包,併發送給指定url。我們通過urllib2等幾個模塊提供的API來實現request請求的發送和相應的接收。
大部分網站登錄時需要攜帶cookie,所以我們還必須設置cookie處理器來保證cookie。


#!/usr/bin/python 
# -*- coding:utf-8 -*-

import urllib
import urllib2
import cookielib

#登錄的主頁面
hosturl = 'http://www.renren.com/'

#post數據接收和處理的頁面,點登陸的時候http POST的鏈接
posturl = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=20151021027896'

#設置一個cookie處理器,它負責從服務器下載cookie到本地,並且在發送請求時帶上本地的cookie
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
  
#打開登錄主頁面(他的目的是從頁面下載cookie,這樣我們在再送post數據時就有cookie了,否則發送不成功)
h = urllib2.urlopen(hosturl)
  
#構造header,一般header至少要包含一下兩項。這兩項是從抓到的包裏分析得出的。
headers = {
			'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0',
			'Referer' : 'http://www.renren.com/'
		   }

#抓包獲取參數,password一般會通過某種方式加密。
postData = {
	'email':'xxxxxx',
	'icode':'',
	'origURL':'http://www.renren.com/home',
	'domain':'renren.com',
	'key_id':1,
	'captcha_type':'web_login',
	'password':'xxxxxx',
	'rkey':'70153f87e588d34f588cccecdd878d66',
	'f':''
	} 

postData = urllib.urlencode(postData)

#通過urllib2提供的request方法來向指定Url發送我們構造的數據,並完成登錄過程  
request = urllib2.Request(posturl, postData, headers)

print request
response = urllib2.urlopen(request)
text = response.read()
text = text.replace("true","1").replace("false","0")
text = eval(text)
url = text.get('homeUrl')  # 這個纔是你人人主頁的真實url
if not url:
	print "error"

response = urllib2.urlopen(url)

result = response.read().decode("utf-8").encode("gbk")
print result


注:
1.登陸一般都會先有一個http GET。用於拉取一些信息及獲得Cookie,然後再http POST登陸。
2.http POST登陸的鏈接有可能是動態的,從GET返回的信息中獲取。
3.PASSWORD有些是明文發送,有些是加密後發送,騰訊的更牛逼,動態加密的,裏面有很多其他數據的加密信息,不只是密碼。不過好像能通過查看JS源碼獲得加密算法。
4.大多數網站的登陸整體流程類似,可能有些細節不一樣。所以不能保證其他網站登陸成功,還有待研究。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章