前言
該文章描述了代碼登陸界面之后如何保存cookie並且之后的訪問繼續使用cookie來進行訪問的操作。主要使用庫http.cookiejar,urllib.request(),urllib.parse
新建時間:20191223
天象獨行
首先,我們先了解一下Cookie這個作用,主要作用是用來提供一個證明,證明用戶的信息。比方說在登陸賬號之后,會接收到一個cookie,接下來的訪問服務器通過cookie就可以確定賬號信息,並且分配相對應的資源以及不用重復輸入賬號密碼。
我們來說明一下http.cookiejar功能,主要功能是對接收下來的Cookie進行存儲。下面是其他功能:
- CookieJar
- 管理儲存cookie,像傳出的http請求添加cookie
- cookie存儲在內存中,CookieJar示例回收后cookie將自動消失
- FileCookieJar
- 是CookieJar的字類
- cookie保存在文件中
- MozillaCookiejar
- 是FileCookieJar的子類
- 與moccilla瀏覽器兼容
- LwpCookieJar
- 是FileCookieJar的子類
- 與libwww-perl標准兼容
注釋關於urllib.request,urllib.parse內容可以查看如下網址:
https://www.cnblogs.com/aaron456-rgv/p/12051754.html
保存Cookie案例:
import urllib.request
import urllib.parse import http.cookiejar ''' 案例情景: 1;使用Python3登陸網址,並且報錯接收的Cookie 2;通過保存下來的Cookie來繼續訪問URL ''' #創建一個cookiejar對象,用來存儲獲取的cookie new_cookie = http.cookiejar.CookieJar() #通過cookiejar對象來自定義一個handler new_handler = urllib.request.HTTPCookieProcessor(new_cookie) #設定一個opener new_opener = urllib.request.build_opener(new_handler) ''' 上面的操作,如果訪問下來的cookie會被保存到對象new_cookie當中,換句話說以后通過new_openenr來訪問URL會自動將保存的cookie發送出去。 ''' ''' 一;訪問登陸界面 ''' #設定URL url1 = "http://192.168.1.136" #設定請求頭字典 new_headers = { "Host": "192.168.1.136", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "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", "Accept-Encoding": "gzip, deflate", "Content-Type": "application/x-www-form-urlencoded", "Content-Length": "43", "Origin": "http://192.168.1.136", "Connection": "close", "Referer": "http://192.168.1.136/index.php", "Cookie": "PHPSESSID=fe78ef94f649511499b4568c82c240af", "Upgrade-Insecure-Requests": "1" } #設定Post傳參值 new_post = { "user_name":"abc123", "pwd":"abc123", "x":"30", "y":"10" } #URL編碼Post傳參值 new_post_url = urllib.parse.urlencode(new_post).encode() #生成請求request new_request = urllib.request.Request(url=url1,headers=new_headers) #發送請求 new_result = new_opener.open(new_request,data=new_post_url) ''' 上面代碼已經發送登陸請求,之后cookie會被存儲到new_Cookie里。 '''
'''
二;隨意訪問登陸之后的頁面,查看是否能個訪問
'''
url2 = 'http://192.168.1.136/user.php?act=news_manage' new_result2 = new_opener.open(url2) print(new_result2.read().decode(encoding="GBK"))
結果: