将cookie写入文件并再次调用(接口测试中的cookie复用)

2017-03-13  本文已影响1507人  海37度思念

公司服务器的验证方式之一是cookie,所以需要将cookie保存,一个是方便在多次请求时的上下文调用,另一个是为了在下次请求时,可以先尝试一下,上次的cookie能否再次使用,若能,则继续使用,若不能,则再次请求生成一个新的cookie,并保存。

登录、获取返回数据和cookie、下一个接口使用此cookie再次调用、获取返回数据,这个流程下来,并没有问题。但是这只是本次程序运行时正常,如果再次运行程序,则又是从登录开始执行,再次获取新的cookie。

于是,自然而然的想到,是否能将cookie保存下来,比如写入存储盘,永久有效,以方便多次运行程序时使用。折腾了半天,搜索了不少信息,先后使用了session保证上下文调用、LWPCookieJar和FileCookieJar类中的save方法和load方法,当然,内置模块的open和write、read方法肯定得要尝试,结果一个都调不通,要么是要求必须是str类型,要么是保存进去的不是我想要的,要么就只能保证本次上下文调用,无法永久储存。

最后还是在一个外国网站上看到了解决方法,下面记录解决步骤,以作备忘笔记(出于公司安全需要,以上代码直接调试是调试不通的)

环境配置:win7,Python2.7,request模块

第一步,登录获取cookie

r = requests.post(url='https://admin.miutrip.com/Account_1/CheckLogin/miutrip.api',

                               data={"customerNumber":"hkg1337","Uid":"15111111111","Pwd":"123456","rememberUid":1},

                               cert=('../SSL/server.cer','../SSL/server.key')

                                  )

登录接口没有头验证和cookie验证,并不是所有目标网站的接口都是这样,所以需要注意

第二步,将cookie保存进cookies文件

with open('../cookies','w') as f:

        pickle.dump(utils.dict_from_cookiejar(r.cookies), f)

为了这一步,真是费尽心思。

with中的那一行代码,其实做了两件事,第一件是将RequestsCookieJar类对象转换成了dict格式,然后写入文件。

这里保存完成后,进入cookies文件中看保存的内容,格式是出乎我们意料的,如果不仔细看,还以为看不懂,见下图:

保存进文件的cookie

这上面的字段和值,都是cookie里的(信息经过了加密,为安全起见,进行了二次隐藏)。

这么个奇怪的格式,能用吗?我很好奇!不过不管怎样,得先把这个奇怪的东西从文件里弄出来赋值给变量啊,于是就有了下一步

第三步,从cookies中读入内容

def get_cookie():

      with open('../cookies','r') as f:

              cookies = utils.cookiejar_from_dict(pickle.load(f))

同样,with中的那行代码,同样做了两件事,先是用load读出了内容,然后将dict内容转换成RequestsCookieJar类对象格式,除此之外,还把RequestsCookieJar类对象,赋给了cookies这个变量

OK,目前都还比较顺利,那么,终极一步来了,这也是最初的目的

第四步,调用cookie执行请求

先来看看调用了格式不对的cookie时,结果返回如下:

{"Code":80000,"Data":"../../../Login.aspx"}

正常调用格式:

r_orderlist = requests.post(url='https://admin.miutrip.com/Flight_0_1/Order/GetFltOfflineOrders/miutrip.api',

      data={"PageIndex":"1",

            "PageSize":"10",

            "OrderStatus":"5",

            "ApprovalStatus":"0",

            "CreateFrom":"2017-02-11",

            "CreateTo":"2017-03-13",

            "IsAbnormalOrder":"false",

            "GetApproveOrder":"0",

            "IfSearchUnNormalOrder":"0",

            "UserRightFlag":"100111111",

            "tdShow":"true",

            "UserType":"1"},

      cert=('../SSL/server.cer','../SSL/server.key'),

      cookies =  get_cookie()

      )

调用了通过前面三步取出来的cookie,那么结果就正常了,与后台数据相比,完全一致。

大功告成!

最后想说的是,这个网站确实很不错,之前也有不少其他代码方面的问题,都是在这个网站上找到答案的!

参考网站:http://stackoverflow.com/questions/13030095/how-to-save-requests-python-cookies-to-a-file 

上一篇下一篇

猜你喜欢

热点阅读