Python3.6下的Requests登陸及利用Cookies登陸

利用Python中的Requests模塊能夠實現Post,Get等發送功能,我以登陸某網站爲例,記錄使用Post發送用戶名、密碼及圖形驗證碼,以及經過Cookies直接登陸的內容。php

1.利用POST發送用戶名、密碼及驗證碼。這裏的驗證碼沒有進行識別,只好先讀取驗證驗圖片,手動輸入。html

 1 def LoginByPost():
 2     imgUrl='http://***/authcode.php'
 3     s=requests.session()
 4     res=s.get(imgUrl,stream=True)
 5     im=Image.open(BytesIO(res.content))
 6     im.show()
 7     code=input()
 8     loginUrl='http://***/admin_loginCheck.php'
 9     postData={'pname':'admin','password':'***','validateCode':code}
10     rs=s.post(loginUrl,postData)
11 url='http://***/***/admin_honor.php'
12 res=s.get(url)
13 res.encoding='utf-8'
14 print(res.text)

此時,能夠看出咱們已經成功登陸,並輸出指定頁面的內容。python

2.利用Cookies直接登陸。無需用戶名、密碼及驗證碼。此時,須要先得到登陸該網站後的Cookies,一種方法是經過瀏覽器查看Cookies,另外一種方法是利用上面的requests.session獲取登陸後的Cookies。咱們採用第二種方式。瀏覽器

(1)經過requests.session獲取Cookies。服務器

def GetCookie():
	imgUrl='http://***/authcode.php'
	s=requests.session()
	print(s.cookies.get_dict())#先打印一下,此時通常應該是空的。
	res=s.get(imgUrl,stream=True)
	im=Image.open(BytesIO(res.content))
	im.show()
	code=input()
	loginUrl='http://***/admin_loginCheck.php'
	postData={'pname':'admin','password':'***','validateCode':code}
	rs=s.post(loginUrl,postData)
	c=requests.cookies.RequestsCookieJar()#利用RequestsCookieJar獲取
	c.set('cookie-name','cookie-value')
	s.cookies.update(c)
	print(s.cookies.get_dict())

 (2)利用上面獲取的Cookies直接登陸cookie

def DirLogin():
	s=requests.session()
	url='http://***/***/admin_honor.php'
	headers={
	'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
	'Accept-Encoding': 'gzip, deflate',
	'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
	'Cache-Control': 'max-age=0',
	'Connection': 'keep-alive',
	'Host': '***',
	'Referer': 'http://***/***/admin_index.php'
	}
	cookies={'PHPSESSID': 'cnguud4r1hmn3passs906odp21'}#這裏就是利用上面的函數得到的Cookies
	rs=s.get(url,headers=headers,cookies=cookies,verify=False)
	rs.encoding='utf-8'
	print(rs.text)

 此時,能夠直接查看所須要頁面的內容。session

說明:然並卵,你會發現,經過Cookies直接登陸,有時好用,有時無用。緣由在於此網站是經過服務器的Session對客戶進行判斷,而Session在服務器端每每會設置會話期限,若是到了時間,服務器會把這個Session刪除,這時,你還得再次利用第一個函數進行Cookie的獲取。app

相關文章
相關標籤/搜索