Python請求自動處理cookie

來源:互聯網
上載者:User

標籤:

  在平時測試當中經常會遇到使用python指令碼來類比http請求的操作,在做一次介面【http請求,返回json】測試時,開發提供的http介面在請求時,會被filter攔截,驗證要求者的session是否合法,由於我們是直接請求,沒有附帶任何的cookie與headers,那如何讓我們合法的進行介面的請求,並繼續測試呢?詳見下面描述:

  在使用系統之前,我們都會經過一個登入的操作,這個登入操作就會把我們的sessionId的狀態屬性設定為合法【不同的系統,細節不同,大體都類似】,我們要是想直接請求介面,並需帶上一個合法的sessionId在我們的cookie中,如何去做呢?

  有以下幾種方法:

  1、人工準備一條合法的sessionId,在請求時放入到cookie中。缺點:需要人工準備,而且sessionId還會到期。

  2、類比登入請求,在回應標頭部裡set cookie中將sessionId扣出來,下次請求時帶上。缺點:需要在回應標頭部中處理set cookie部分內容,若有大量的set cookie時,處理起來比較麻煩。

  3、使用CookieJar,類比登入請求,接著類比介面請求。優點:簡單方便。

  

  第一種方法:這裡不介紹,也不推薦。

  第二種方法:可以參考http請求時添加要求標頭。

  第三種方法:詳見以下描述。

  現有介面QueryVideoList:http://192.168.1.242:9000/QueryVideoList

  QueryVideoList請求參數:{‘catalogsID‘:‘‘,‘catagoryCode‘:‘‘,‘sortType‘:‘desc‘,‘sortField‘:‘Time‘,‘videoInfo‘:‘‘,‘beginTime‘:‘‘ ,‘endTime‘:‘‘ ,‘pageSize‘:‘20‘,‘pageIndex‘:‘1‘}

  登陸時post的url:http://192.168.1.242:9000/    

  這個啥意思呢?你可以通過http請求監控工具,監控下登入的過程可以看到。推薦fiddler,登陸時會post使用者名稱與密碼,這個post的url就是登入的url,這個post操作主要就是將你的sessionId設為合法。

  接下來我來直接上代碼吧:

 1 #coding:u8 2 import urllib 3 import urllib2 4 import cookielib 5  6 cookieJar=cookielib.CookieJar() 7 opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) 8  9 login_post_url = "http://192.168.86.242:9000/"10 query_video_list_post_url = "http://192.168.1.242:9000/QueryVideoList"11 12 login_post_data = {‘username‘:‘feixu‘,‘password‘:‘000000‘,‘SysType‘:‘1‘}13 query_video_list_post_data = {‘catalogsID‘:‘‘,‘catagoryCode‘:‘‘,‘sortType‘:‘desc‘,‘sortField‘:‘Time‘,‘videoInfo‘:‘‘,‘beginTime‘:‘‘ ,‘endTime‘:‘‘ ,‘pageSize‘:‘20‘,‘pageIndex‘:‘1‘}14 15 #urlencode編碼16 def encode_post_data(post_data):17     return urllib.urlencode(post_data)18 19 #post請求通用方法,使用全域變數opener,具體cookie收集功能20 def post_fun(url,post_data):21     global opener22     req=urllib2.Request(url,encode_post_data(post_data))23     return opener.open(req)24 25 #查詢視頻列表介面26 def query_video_list(url,post_data):27     return post_fun(url,post_data)28 29 #登入,使cookie中指定的session變為合法30 def login(url,post_data):31     return post_fun(url,post_data)32 33 login(login_post_url,login_post_data)34 resp = query_video_list(query_video_list_post_url,query_video_list_post_data)35 print resp.read()

 

  首先我們建立了一個cookieJar,然後使用這個cookieJar構建了一個opener,也就是說,後期使用opener來進行請求時,會自動將cookie存入到cookieJar容器中,再繼續請求時,會附帶上一次存入的cookie,因此我們只需要使用opener來進行請求就行了,cookie的事,由cookieJar自動幫我們處理。

  你需要處理的就是請求的url、請求的資料,除了cookie之外的headers要求標頭

 

Python請求自動處理cookie

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.