大家都对cookie都不陌生,我们本篇文章使用requests结合cookie进行实例演示。我们使用一个接口项目地址,因为接口项目涉及到隐私问题,所以这里接口的地址我暂时不会给大家开放,但是我会给大家演示一个整体cookie的处理流程,因为这部分在实际的接口测试中是十分重点的。大家只需要把处理cookie的流程和原理整明白了,其他的就都好说了。。。我们接下开始干:

首先呢,我们要知道整个cookie的一个实现:

其实cookie是一个客户端的机制,关于cookie的实现其实是很复杂的。大家可以访问这篇文章去学习和了解:深入理解cookie和session  ok,我们了解了什么是cookie以后在来看下面的操作。首先我们要知道cookie的一个整个请求处理流程:

  1.发送登陆请求

  2.登陆成功后

  3.获取session信息并返回

  4.带着登陆成功后的session登陆后的其他接口

在访问登陆接口时,我们先开启charles进行抓包,然后在定义一个login方法,来看代码的实现方法:

抓取登陆请求后,我们使用requests进行编写login接口:

import requests

def login():
r = requests.post(
'http://xxxxxxx:20080/auth/login',
data={"username":'system',"password":""}
)
return r.json()
print (login())

我们查看登陆后,系统返回的结果:

C:\Python35\python.exe E:/project/index.py
{'code': } Process finished with exit code

很明显,返回了一个code=200的状态码,这个并不是我们需要的,我们需要的是登陆后,服务器返回的session,我们要获取这个Session,方便我们访问系统的其他接口,所以,这里面,我们需要使用一个特殊的方法来获取登陆系统后,服务器返回的session,继续往下看,我们将上面的代码进行处理: r.cookies是获取服务器返回的session方法

import requests

def login():
r = requests.post(
'http://xxxxxxx:20080/auth/login',
data={"username":'system',"password":""}
)
return r.cookies
print (login())

返回结果:

<RequestsCookieJar[<Cookie port= for 117.39.63.66/>, <Cookie session=.eJwdjsuKwkAQRX9Fau0ibesmMIuGSJNAdxGoGKo2wmh8lMkmjsRp8d8nzvZwz-W8YH8au_sF8p_x0S1hfz1C_oLFN-SAPqyDbldIO-U2bIQOv-hrw63ceKgT68EK8SYOpYnaGKHGiopyclZ8MyGFp2h_ZS2nD0dqMmznDUkvhQyh_Xhyi-qykESDryde7fqQI7gveS3jcu_G_Hwy8_wA-akbj.DlapFg.6CIk-zQ13C3TbJ-mjjNP_tpxySw for 117.39.63.66/>]>

OK,我们得到了服务端返回的cookies,类似这种的<Cookie session=.eJwdjsuKwkAQRX9Fau0ibesmMIuGSJNAdxGoGKo2wmh8lMkmjsRp8d8nzvZwz-W8YH 然后我们取到session,使用的方法是:r.cookies["session"],看代码如下:

import requests

def login():
r = requests.post(
'http://xxxxxxx:20080/auth/login',
data={"username":'system',"password":""}
)
return r.cookies['session']
print (login())

返回结果如下:

.eJwdjsuKwkAQRX9Fau0ibesmMIuGSJNAdxGoGKo2wmh8lMkmjsRp8d8nzvZwz-W8YH8au_sF8p_x0S1hfz1C_oLFN-SAPqyDbldIO-U2bIQOv-hrw63ceKgT68EK8SYOpYnaGKHGiopyclZ8MyGFp2h_ZS2nD0dqMmznDUkvhQyh_Xhyi-qykESDryde7fqQ2GBx7KOyRV8N828KdE5M1QWpnptKK4XLkCplcs9I7gveS3jcu_G_Hwy8_wA-akbj.Dlaprw.y-qE1LxdvCMnz0W9B87H6Cv8W80

ok,整个cookie的获取流程我们就到这里了。假设如果我们不带上session,直接访问系统的其它任意一个接口,我们来看一下是否可以呢?我们继续定义一个方法,叫getInfo,代码如下:

import requests

def login():
r = requests.post(
'http://xxxxxxx:20080/auth/login',
data={"username":'system',"password":""}
)
return r.cookies['session'] def getInfo():
r =requests.get('http://xxxxx:20080/settings/option/cloud/data')
return r.text
print(getInfo())

查看返回结果:

C:\Python35\python.exe E:/project/index.py
<!DOCTYPE html>
<!--[if IE ]>
<html lang="en" class="ie8 no-js"> <![endif]-->
<!--[if IE ]>
<html lang="en" class="ie9 no-js"> <![endif]-->
<!--[if !IE]><!-->
<html lang="en">
<!--<![endif]-->
<!-- BEGIN HEAD --> <head>
<meta charset="utf-8" />
<title>
xxxxxxxxx系统
</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1" name="viewport" />
<meta content="" name="description" />
<meta content="" name="author" />
<!-- BEGIN GLOBAL MANDATORY STYLES -->
<link href="../static/global/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="../static/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="../static/global/plugins/uniform/css/uniform.default.css" rel="stylesheet" type="text/css" />
<!-- BEGIN PAGE LEVEL STYLES -->
<link href="../static/pages/css/login-1.min.css" rel="stylesheet" type="text/css" />
<!-- END PAGE LEVEL STYLES -->
<!-- BEGIN THEME LAYOUT STYLES -->
<!-- END THEME LAYOUT STYLES -->
<link rel="shortcut icon" href="/static/img/favicon.ico" /> </head>
<!-- END HEAD --> <body class=" login"> <div id="wrapper">
<div class="login_box">
<form class="login-form" action="/auth/login" method="post" onsubmit="return false;">
<div class="alert alert-danger display-hide" style="display: none">
<button class="close" data-close="alert"></button>
<span> 请输入用户名密码. </span>
</div>
<div class="login_right">
<div class="login_wrapper">
<div class="park_icon">
<div class="left">
<img src="/static/img/login_icon.png" alt="">
</div>
<div class="right">
<img src="/static/img/login_text.png" alt="">
</div>
</div>
<div class="title">
xxxxxxxxxx
系统 </div> <div class="input_box"> <div class="form-group"> <div class="input-icon"> <input class="form_login" type="text" placeholder="用户名" name="username" /> </div> </div> <div class="form-group"> <div class="input-icon"> <input class="form_login" type="password" placeholder="密码" name="password" /> </div> </div> </div> <button type="submit" class="btn white pull-right"> 登录 </button> </div> </div> </form> </div> </div> <script src="../static/global/plugins/jquery.min.js" type="text/javascript"></script> <script src="../static/global/plugins/bootstrap/js/bootstrap.min.js" type="text/javascript"></script> <script src="../static/global/plugins/uniform/jquery.uniform.min.js" type="text/javascript"></script> <!-- END CORE PLUGINS --> <!-- BEGIN PAGE LEVEL PLUGINS --> <script src="../static/global/plugins/jquery-validation/js/jquery.validate.min.js" type="text/javascript"></script> <script src="../static/global/plugins/jquery-validation/js/additional-methods.min.js" type="text/javascript"></script> <!-- END PAGE LEVEL PLUGINS --> <!-- BEGIN THEME GLOBAL SCRIPTS --> <script src="../static/global/scripts/app.min.js" type="text/javascript"></script> <!-- END THEME GLOBAL SCRIPTS --> <!-- BEGIN PAGE LEVEL SCRIPTS --> <script type="text/javascript"> jQuery(document).ready(function() { $(".login-form").validate({ errorElement: "span", errorClass: "help-block", focusInvalid: !, rules: { username: { required: ! }, password: { required: ! }, remember: { required: ! } }, messages: { username: { required: "用户名不能为空." }, password: { required: "密码不能为空." } }, invalidHandler: function(e, r) { $(".alert-danger span").text("请输入用户名密码."); $(".alert-danger", $(".login-form")).show() }, highlight: function(e) { $(e).closest(".form-group").addClass("has-error") }, success: function(e) { e.closest(".form-group").removeClass("has-error"), e.remove() }, errorPlacement: function(e, r) { e.insertAfter(r.closest(".input-icon")) }, submitHandler: function(e) { $('button').html('正在登录...').css('opacity', '0.5').css('cursor', 'progress'); $('#username, #password').attr('disabled', 'disabled'); var postData = $(e).serialize(); $.post("/auth/login", postData, function(data) { if (data.code == ) { window.location.href = "/"; } else { $(".alert-danger span").text(data.err_msg); $(".alert-danger", $(".login-form")).show(); $('button').html('登录').css('opacity', '').css('cursor', 'pointer'); $('#username, #password').removeAttr('diabled'); } }); return false; } }); $(".login-form input").keypress(function(e) { return  == e.which ? ($(".login-form").validate().form() && $(".login-form").submit(), !) : void  }); }); </script> </body> </html> Process finished with exit code 

答案显而易见,我们没有登录成功,所以这个接口我们是无法访问的.这时候我们就要带上session来访问我们刚刚的接口了,我们继续来看 加上session后的整个代码的处理:

import requests

def login():
r = requests.post(
'http://117.39.xxxx/auth/login',
data={"username":'system',"password":""}
)
return r.cookies['session'] def getInfo():
r =requests.get('http://117.39.xxxxx/settings/option/cloud/data',
cookies={"session":login()}) #增加session
return r.json() print(getInfo())

查看返回的结果:

{'code': , 'data': {'cloud_ip': {'value': 'sc.parkingwang.com'}, 'waiting_enable_flag': {'value': ''}, 'parkno_type': {'value': }, 'terminal_operator': {'value': '192.168.199.1'}, 'total_full_limit_type': {'value': ''}, 'tmp_full_limit_flag': {'value': ''}, 'cloud_port': {'value': ''}, 'arm_no': {'value': ''}, 'connected': {'value': ''}, 'pic_upload': {'value': ''}, 'cloud_url': {'value': 'http://api.com/picupload/'}, 'auth_car_waiting_enable_flag': {'value': ''}, 'fixed_full_limit_flag': {'value': ''}}}

很明显,我们登录成功了,系统的接口也访问成功了。

Requests接口测试-对cookies的操作处理(一)的更多相关文章

  1. Requests接口测试-对cookies的操作处理(二)

    我们继续来讨论一下cookie这方面的内容,我们都知道cookie是数据,一般的话在我接口测试中,数据都是要和代码进行分离的.本篇内容,我们队cookie内容进行处理,我们把登陆成功后的cookie写 ...

  2. Requests接口测试库-官网快速上手

    Requests 一个发送HTTP请求的库基于urllib3,相比自带的库,提供了更高效简洁的可用方法,测试从业者用来做接口测试的一个好工具 文章内容均来自官网:https://requests.re ...

  3. python requests接口测试

    Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最 ...

  4. Requests发送带cookies请求

    一.缘 起 最近学习[悠悠课堂]的接口自动化教程,文中提到Requests发送带cookies请求的方法,笔者随之也将其用于手头实际项目中,大致如下 二.背 景 实际需求是监控平台侧下发消息有无异常, ...

  5. requests请求获取cookies的字典格式

    python中requests请求的cookies值一般是jar包,如何将cookies值改为字典,此处运用了方法.举例如下: import  requests response = requests ...

  6. requests接口测试-requests的安装

    requests接口测试-requests的安装 安装常见问题 提示连接不上,443问题 一般是因为浏览器设置了代理,关闭代理. 网络加载慢,设置国内镜像地址 1.pip安装 2.pycharm安装 ...

  7. (四)requests模块的cookies和代理操作

    基于requests模块的cookie操作 引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取某个人“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到 ...

  8. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  9. Python+Requests接口测试教程(2):

    开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...

随机推荐

  1. phpstorm 光标设置

    1.是否允许光标定位在行尾之后的任意位置Allow placement of caret after end of line 这个设置是上下换行的时候,光标可以定位在任意位置,只能通过方向键移动光标, ...

  2. erp中三大订单CO、PO、MO

    ERP即 企业资源计划 (Enterprise Resource Planning),由美国 Gartner Group 公司于1990年提出. ERP系统是指建立在信息技术基础上,以系统化的管理思想 ...

  3. charles手机抓包配置-2

    破解的安装包,自己的百度云里有收藏 http://www.zhimengzhe.com/IOSkaifa/248398.html http://blog.csdn.net/swj6125/articl ...

  4. POJ 1061 青蛙的约会(拓展欧几里得求同余方程,解ax+by=c)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 122871   Accepted: 26147 Descript ...

  5. PhpStorm 配置在浏览器中打开文件

    这东东中文资料太少- -鼓捣了好久才有结果 点击File-Settings-Deployment .点+按钮增加服务器 Mapping 设置工程路径等 点击 Edit Confi 这东东中文资料太少- ...

  6. 【BZOJ】1057 [ZJOI2007]棋盘制作(悬线法)

    题目 传送门:QWQ 分析 先把题目给出的矩阵变换一下,如果$ a[i][j] $中$ i+j \mod 2 = 1 $那么就对$ a[i][j] $取一下反. 接着就是求原图中最大的0.1子矩阵 详 ...

  7. 项目管理工具maven(二)

    2 整合ssh框架 2.1 依赖传递 只添加了一个struts2-core依赖,发现项目中出现了很多jar, 这种情况 叫 依赖传递 2.2 依赖版本冲突的解决 1. 第一声明优先原则 <dep ...

  8. SQL中INNER JOIN的用法

    SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...

  9. windows 关机 重启 命令

    关机 shutdown -s -t 0 重启 shutdown -r -t 0 重启电脑windows 立即关机 shutdown -s 三十分钟后关机 shutdown -s -t 30 举例说明一 ...

  10. RAD C++Builder xe7 std::map xtree BUG

    c++Builder 6 下的std::map还能用,有代码提示. 换到xe7,代码提示出来就一个tt.operator [](),代码没法往下写了. 最后把Target Platforms切换到64 ...