Python请求自动处理cookie

  在平时测试当中经常会遇到使用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 opener
22     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请求头

技术改变未来
原文地址:https://www.cnblogs.com/CodeTracker/p/4735863.html