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

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

作者: 海37度思念 | 来源:发表于2017-03-13 18:51 被阅读1507次

    公司服务器的验证方式之一是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 

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/uehwittx.html