利用Python中的Requests模塊可以實現Post,Get等發送功能,我以登錄某網站為例,記錄使用Post發送用戶名、密碼及圖形驗證碼,以及通過Cookies直接登錄的內容。
1.利用POST發送用戶名、密碼及驗證碼。這里的驗證碼沒有進行識別,只好先讀取驗證驗圖片,手動輸入。
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)
此時,可以看出我們已經成功登錄,並輸出指定頁面的內容。
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直接登錄
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)
此時,可以直接查看所需要頁面的內容。
說明:然並卵,你會發現,通過Cookies直接登錄,有時好用,有時無用。原因在於此網站是通過服務器的Session對客戶進行判斷,而Session在服務器端往往會設置會話期限,如果到了時間,服務器會把這個Session刪除,這時,你還得再次利用第一個函數進行Cookie的獲取。
