python設置cookie
『壹』 python非同步中aiohttp獲取不到正確的Set-cookies值
python非同步中aiohttp獲取不到正確的Set-cookies值
這幾天學習了python的非同步請求,想修改之前寫的代碼提高請求效率,但遇到一個包含set-cookie返回的請求無法獲取正確的cookie值
原程序關鍵代碼(單線程)(重點看print()輸出內容):
def enter_study(num, course): # 進入每個課群的每個課程記錄每個章節url
global lesson_url # 章節
header['Referer'] = re.search(r'http.*?course', qun_course_url[num][course]).group() + 's'
print(session.cookies) # 列印當前網站的cookies
print('
')
while True:
try:
request = session.get(qun_course_url[num][course], headers=header, timeout=3) # 進入課程
print(request.cookies)
print(session.cookies) # 列印當前網站的cookies
input()
break
except Exception as e:
print('進入課程學習重試中。。。')
continue
update_time(1)
update_time(2)
temp_list = []
for x in re.findall(r'/courses/YOOCS*/">', request.text):
temp_list.append('https://xueyuan.yooc.me' + x[:-2]) # 該課程有多少章節
lesson_url[num][course] = temp_
運行結果(cookies中間空白處因為涉及用戶信息所以屏蔽了):
修改後的出現問題的代碼(非同步)(重點看print()輸出內容):
async def enter_study(num, course, header): # 進入每個課群的每個課程記錄每個章節url
async with aiohttp.ClientSession(cookies=cookie) as session:
header['Referer'] = re.search(r'http.*?course', qun_data[num][2][course]).group() + 's'
#列印請求前的cookie記錄
print(session.cookie_jar.filter_cookies())
async with session.get(qun_data[num][2][course], headers=header) as html: # 進入課程
update_time(1)
update_time(2)
print('
')
print(html.cookies)#列印Set-cookie信息
print()
#列印請求後的cookie記錄
print(print(session.cookie_jar.filter_cookies()))
if str(html.cookies).find('Set-Cookie') > -1:
save_cookie_record['Set-Cookie'] = html.cookies
rep_text = await html.text(encoding='utf-8')
temp_list = []
for x in re.findall(r'/courses/YOOCS*/">', rep_text):
temp_list.append('https://xueyuan.yooc.me' + x[:-2]) # 該課程有多少章節
qun_data[num][2][course] = temp_
運行結果(請求後返回的set-cookies信息沒有更新):
該程序是用一個cookie字典來保存cookie值的,需要通過請求後的set-cookie值來更新我的cookie字典,為什麼用在非同步請求上卻不行呢?
『貳』 python獲取cookie後怎麼模擬登陸網站
運行平台:Windows
Python版本:Python3.x
IDE:Sublime text3
一、為什麼要使用Cookie
Cookie,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。
比如說有些網站需要登錄後才能訪問某個頁面,在登錄之前,你想抓取某個頁面內容,登陸前與登陸後是不同的,或者不允許的。
使用Cookie和使用代理IP一樣,也需要創建一個自己的opener。在HTTP包中,提供了cookiejar模塊,用於提供對Cookie的支持。
三、總結
獲取成功!如果看過之前的筆記內容,我想這些代碼應該很好理解吧。
『叄』 python測試介面時需要登錄怎麼解決
有些網頁需要你登錄之後才可以訪問,你需要提供賬戶和密碼。
只要在發送http請求時,帶上含有正常登陸的cookie就可以了。
1.首先我們要先了解cookie的工作原理。
Cookie是由伺服器端生成,發送給User-Agent(一般是瀏喚皮覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給伺服器(前提是瀏覽器設置為啟用cookie)。Cookie名稱和值可以由伺服器端開發自己定義,對於JSP而言也可以直接寫入jsessionid,這樣伺服器可以知道該用戶是否合法用戶以及是否需要重新登錄等。
2.之後我們要獲取和塵差到用戶正常登錄的cookie.
python提供了cookieJar的庫,只要兄拍把cookieJar的實例作為參數傳到urllib2的一個opener裡面。
然後訪問一次登錄的頁面,cookie就已經保存下來了。之後通過這個實例訪問所有的頁面都帶有正常登陸的cookie了。
以人人網為例子。
Python代碼
#encoding=utf-8
importurllib2
importurllib
importcookielib
defrenrenBrower(url,user,password):
#登陸頁面,可以通過抓包工具分析獲得,如fiddler,wireshark
login_page="hLogin.do"
try:
#獲得一個cookieJar實例
cj=cookielib.CookieJar()
#cookieJar作為參數,獲得一個opener的實例
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#偽裝成一個正常的瀏覽器,避免有些web伺服器拒絕訪問。
opener.addheaders=[('User-agent','Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1)')]
#生成Post數據,含有登陸用戶名密碼。
data=urllib.urlencode({"email":user,"password":password})
#以post的方法訪問登陸頁面,訪問之後cookieJar會自定保存cookie
opener.open(login_page,data)
#以帶cookie的方式訪問頁面
op=opener.open(url)
#讀取頁面源碼
data=op.read()
returndata
exceptException,e:
printstr(e)
#訪問某用戶的個人主頁,其實這已經實現了人人網的簽到功能。
printrenrenBrower("httm/home","用戶名","密碼")