拿我平时测试的一个系统为例,从UI层面来说必须先登录才可以进行后续操作,但是我在测试接口文档提供的接口时,发现并不需要登录,每个接口只要传参就可以正常返回。原因是我们这边专门弄了一个接口包来统一管理常用的接口,也方便其他程序调用。所以我之前在测试接口时还没有考虑过“要保持登录(会话)状态”这个问题。趁周末看了下这个问题,通过fiddler直接抓请求(不用接口包提供的接口),学习requests库是如何保持一个会话的。

1.查看登录前后的cookie变化

首先打开登录页面,刷新一下,fiddler会抓到一个请求(应该是登录接口),查看Inspectorstab中的Raw,可以看到请求头的详细信息

然后输入用户名、密码、验证码登录,查看登录后的请求头信息

登录前、登录后的cookie发生了变化。

也可以通过Chrome浏览器来查看cookie,如下

  

可以看到浏览器中显示的cookie值和fiddler抓到请求中的cookie值不一致,浏览器显示的是全部的cookie,而fiddler只是显示的某个请求的cookie(每个请求的cookie会有所不同);(我拿的是浏览器中的cookie)

如果要跳过验证码登录并保持登录状态(即保持一个会话),只需要提取登录后的cookie,并把它添加到一个requests库的Session对象即可;

2.添加cookie有2种方式:

一个是把cookie先写成字典形式,然后把字典转换为cookiejar

s = requests.Session()  # 开启一个会话Session
cookie_dict={'49BAC005-7D5B-4231-8CEA-16939BEACD67': 'cktest001', # 从chrome浏览器中取到的cookie值
'JSESSIONID':'F4FFF69B8XXXXXXC8DCB4C061C0',
'JSESSIONIDSSO':'9D49C76FD6XXXXXF294242B44A'
}
s.cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True) # 把cookie值转换为cookiejar类型,然后传给Session 注意:这个方法会替换掉原有的cookies

二是追加cookies

s = requests.Session()  # 开启一个会话Session
jar = requests.cookies.RequestsCookieJar() # 创建一个Cookie Jar对象
jar.set('49BAC005-7D5B-4231-8CEA-1XXXXBEACD67','cktXXXX001') # 向Cookie Jar对象中添加cookie值
jar.set('JSESSIONID','F4FFF69B8CXXXX80F0C8DCB4C061C0')
jar.set('JSESSIONIDSSO','9D49C7XXXX448FDF5B0F294242B44A')
s.cookies.update(jar) # 把cookies追加到Session中

3.完整业务流程:登录并录入一条咨询

页面功能如下,提交后数据库中便会多出一条数据

把登录后的cookie传入session后,调用提交接口即可(如果不加登陆后cookie,直接调用提交接口会提示未登录)


# coding:utf-8 import requests
url = 'http://localhost.:8088/XXX/index/toIndex.do'
# 登录接口
header = {
# 请求头,建议一定要写上,不写的话直接调用接口,会提示没有权限,可以直接从fiddler复制
"Host":"localhost.:8088",
"Connection":"keep-alive",
"Cache-Control":"max-age=0",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Upgrade-Insecure-Requests":"",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36",
"Referer":"http://localhost.:8088/XXX/index/toIndex.do",
"Accept-Encoding":"gzip, deflate, sdch",
"Accept-Language":"zh-CN,zh;q=0.8"
} s = requests.Session()
# 开启一个会话Session # cookie_dict={'49BAC005-7D5B-4231-8CEA-16XXXXEACD67': 'ckXeXX001',
# 'JSESSIONID':'F4FFF69B8XXXX0F0C8DCB4C061C0',
# 'JSESSIONIDSSO':'9D49XXXX448FDF5B0F294242B44A'
# }
# s.cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
# print(s.cookies) jar = requests.cookies.RequestsCookieJar()
# 创建一个Cookie Jar对象
jar.set('49BAC005-7D5B-4231-8CEA-1XXX39XEACD67','ckXXXX001')
# 向Cookie Jar对象中添加cookie值
jar.set('JSESSIONID','F4FFF69BXXXX0F0C8DCB4C061C0')
jar.set('JSESSIONIDSSO','9D49C76FDXXXXF5B0F294242B44A')
s.cookies.update(jar) # 把cookies追加到Session中 #r1 = s.get(url, headers=header,
verify=False) # 使用session发送登录请求
print(s.cookies)
# print(r1.text)
url2 = 'http://localhost:8088/XXX/saveConsult.do'
# 提交咨询信息接口,通过fiddler抓取的
header2 = {
"Host":"localhost.:8088",
"Connection":"keep-alive",
"Content-Length":"",
"Accept":"application/json, text/javascript, */*; q=0.01",
"Origin":"http://localhost.:8088",
"X-Requested-With":"XMLHttpRequest",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"Referer":"http://localhost.:8088/XXX/toConsultEdit.do",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.8"
}
data = {
'clientCode': 'test',
'topic': 'topic_test',
'content': '测试接口',
'resrcType': ''
}
r2 = s.post(url2, headers=header2, data=data, verify=False) # 使用session发送提交咨询请求 # verify=False表示忽略验证SSL证书
print(r2.text)
print(r2.status_code)

返回结果

数据库也对应地增加了一条数据

注意:在调用接口时,最好连请求头信息也一并传进去,不然有时候会请求失败,我这里如果不加headers的话,会返回403,提示无权限(唉,因为没经验,所以第一次没传headers,结果总是失败,以为是没有登录成功呢,后来直接在fiddler的Composer那里模拟这个请求,才发现这个问题)

 

还有一个问题是,其实只要把登录后的cookies传入session,然后用这个session发送提交咨询请求即可,无需再发送登录请求了(上面登录只是为了验证是否登录成功)


2018-04-22 17:21:18

requests库使用:通过cookie跳过验证码登录,并用Session跨请求保持cookie的更多相关文章

  1. 自动化测试使用cookie跳过验证码

    准备工具: fiddler Python+selenium 安装fidder fidder官方下载地址 fidder首次安装需要设置才能抓取https参考如下 fidder设置抓取https 开始 1 ...

  2. Vue router拦截 如果用户并未登录直接跳转到登录界面(最简单的cookie演示)

    router.beforeEach(function(to,from,next){ console.log('路由拦截') console.log(to.name) console.log(from. ...

  3. Jmeter获取Cookie并传递到下一个线程---跨线程后cookie找不到了

    网上找了一堆文章没有一个是实际操作的,自己边试边查边摸索终于找到了一个全套的办法. 原创文章,转载请说明出处. 1.取得cookie 直接这样写就可以了${COOKIE_JSESSIONID},当然具 ...

  4. 《selenium2 python 自动化测试实战》(12)——跳过验证码登录add_cookie

    微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

  5. 自动化测试 -- 通过Cookie跳过登录验证码

    之前写过一篇博客:自动化测试如何解决验证码的问题. http://www.cnblogs.com/fnng/p/3606934.html 介绍了验证码的几种处理方式,最后一种就是通过Cookie跳转过 ...

  6. Cookie跳转登录验证码

    对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的, 对于系统来说使用验证码可以有效果的防止采用机器猜测方 ...

  7. Requests方法 -- cookie绕过验证码登录操作

    前言有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加 cookie 的方式绕过验证码. 1.这里以登录博 ...

  8. python接口自动化(十三)--cookie绕过验证码登录(详解)

    简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加cookie的方式绕过验证码.(注意:并不是所有的 ...

  9. (爬虫)requests库

    一.requests库简介 urllib库和request库的作用一样,都是服务器发起请求数据,但是requests库比urllib库用起来更方便,它的接口更简单,选用哪种库看自己. 如果没有安装过这 ...

随机推荐

  1. ReportingService报表入门

    今天我们来学习一下ReportingService报表的制作. ReportingService是微软提供的一个制作报表的工具,它集成在Microsoft Visual Studio中. 启动Visu ...

  2. MagicSuggest – Bootstrap 主题的多选组合框

    MagicSuggest 是专为 Bootstrap 主题开发的多选组合框.它支持自定义呈现,数据通过 Ajax 异步获取,使用组件自动过滤.它允许空间免费项目,也有动态加载固定的建议. 您可能感兴趣 ...

  3. LeetCode Linked List Cycle II 单链表环2 (找循环起点)

    题意:给一个单链表,若其有环,返回环的开始处指针,若无环返回NULL. 思路: (1)依然用两个指针的追赶来判断是否有环.在确定有环了之后,指针1跑的路程是指针2的一半,而且他们曾经跑过一段重叠的路( ...

  4. Git CMD - mv: Move or rename a file, a directory, or a symlink

    命令格式 git mv [-v] [-f] [-n] [-k] <source> <destination> git mv [-v] [-f] [-n] [-k] <so ...

  5. HDU 3711 Binary Number

    Binary Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  6. Peter Pan By: J. M. Barrie

    Audio book: (mp3+txt) http://www.booksshouldbefree.com/book/peter-pan-by-j-m-barrie

  7. 爆炸!iOS资源大礼包(持续更新...)

    今天为大家整理了一些关于iOS学习的干货,献给正在奋斗的你们,首先声明一下,在整理的过程中参考了大量的博客和文章,知识的分享终究会增值,在此表示感谢,希望这篇文章给大家带来帮助. 基础部分: C语言教 ...

  8. 章节八、3-如何用Chrome开发者工具查看元素

    一.如何使用开发者工具,操作步骤与火狐浏览器一致(此处不重复叙述,此处主要描述如何查找元素是否存在以及元素在页面中是否重复). 1.打开开发者选项,然后按“ctrl+f”,会出现一个输入框在输入框中输 ...

  9. GItHub Git 基础教程 常用命令 命令

    最近复习了一下Git的使用,简单总结了一些.以供以后查阅和大家参考. 一,安装 首先是Linux下: 打开shell ,输入 sudo apt-get install git-core 之后回车输入密 ...

  10. C指针原理(14)

    tcc源码分析 本博客所有内容是原创,如果转载请注明来源 http://blog.csdn.net/myhaspl/ tcctok.h定义了C语言的词法分析的基本元素,主要定义了关键字. /* key ...