Python Requests 小技巧总结
关于 Python Requests ,在使用中,总结了一些小技巧把,分享下。
1:保持请求之间的Cookies,我们可以这样做。
import requests
self.session = requests.Session()
self.session.get(login_url) # 可以保持登录态
11
2:请求时,会加上headers,一般我们会写成这样
self.session.get(url, params, headers=headers)
唯一不便的是之后的代码每次都需要这么写,代码显得臃肿,所以我们可以这样:
#在构造函数中,这样设置是全局的。
# 设置请求头
self.s = requests.Session()
self.s.headers = {'balabala'}
# 移除服务器验证
self.s.verify = False
# 设置代理
self.s.proxies={'aa'}
# 如果后续headers有改变,再次赋值就可以了。
self.s.get(url, params, headers=new_headers)
3:默认requests请求失败后不会重试,但是我们跑case时难免遇到一些网络,服务重启,外部原因导致case失败,我们可以在Session实例上附加HTTPAdapaters 参数,增加失败重试次数。
request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
self.session.mount('https://',request_retry)
self.session.mount('http://',request_retry)
这样,之后的请求,若失败,重试3次。
4:重定向
网络请求中可能会遇到重定向,我们需要一次处理一个请求,可以把重定向禁止。
self.session.post(url,data,allow_redirects=False)
5: post请求提交json格式数据时(请求头为:{“Content-Type”: “application/json”}),一般先要把python对象转换成json对象。可能很多时候是这样写:
self.session.post(url, data=json.dumps(data))。
其实post有一个默认参数json,可以直接简写成:
self.session.post(url, json=data)
6:写接口请求,debug时,会需要看下代码请求的详细信息,当然我们可以使用fiddler来查看,其实我们自己也可以在代码这样获取debug信息*
import requests
import logging
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
requests.get('https://www.baidu.com')
#更好的方法是自己封装一个装饰器,就可以为任意请求函数添加一个debug功能。
7:使用grequests实现异步请求。
pip install grequests
import grequests
urls = [
'http://www.url1.com',
'http://www.url2.com',
'http://www.url3.com',
'http://www.url4.com',
'http://www.url5.com',
'http://www.url6.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)
# [<Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>]
8:发送自定义cookies
我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies
我们可以这样
# 自定义cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}
session.post('http://wikipedia.org', cookies=cookie)
9:需求确定前后端并行设计时,这时测试并没有办法调用接口,如何做接口测试呢?我们可以使用mock或者是httpretty
import requests
import httpretty
# 模拟返还的状态码
@httpretty.activate
def test_beta1_access():
httpretty.register_uri(httpretty.GET, "http://beta.com/",
body="here is the mocked body",
status=201)
response = requests.get('http://beta.com')
expect(response.status_code).to.equal(201)
# 模拟返还response的body
@httpretty.activate
def test_some_api():
httpretty.register_uri(httpretty.GET, "http://beta.com/",
body='{"success": false}',
content_type='text/json')
response = requests.get('http://beta.com/')
expect(response.json()).to.equal({'success': False})
10:统计一个API请求花费的时间,我们可以使用如下方法
self.session.get(url).elapsed
11:设置请求超时
self.session.get(url, timeout=15)
# timeout 仅对连接过程有效,与响应体的下载无关。
# timeout 并不是整个下载响应的时间限制,而是如果服务器在15 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)
关于Python ,requests的小技巧,就是这些。
Python Requests 小技巧总结的更多相关文章
- Python学习小技巧之列表项的排序
Python学习小技巧之列表项的排序 本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 典型代码1: data_list = [6, 9, 1, ...
- 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧
30个有关Python的小技巧 2013/07/04 · Python, 开发 · 4 评论 · Python 分享到: 66 本文由 伯乐在线 - Kevin Sun 翻译.未经许可,禁止转载!英文 ...
- Python编码小技巧分享【新手必学】
本次分享了python编程小技巧总结如下,希望对大家有帮助,非常实用哦注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮答疑.为此小编建了个Python全栈免费答疑交流.裙 :一久武其 ...
- 30个有关Python的小技巧
从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当 ...
- <转> 30 个有关 Python 的小技巧
目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...
- Python(^^^^^小技巧^^^^^——不定期更新)
偶然想到的小技巧 ''' 交互中对传入函数的参数的数目进行检测 ''' def func(a,b,c): print(a,b,c) s=input(">>>>:&qu ...
- python debug小技巧&&工程能力的几点建议
Debug小技巧: 转载请声明本文的引用出处:仰望大牛的小清新 1.初次编程时,在每一个if后面都写上else,这样,如果你的else原本是不应该运行的,那么就可以在else中输出此时的状态信息便于排 ...
- python实用小技巧自问自答系列(一):查看类中函数文档doc的方法
问题:如何查看某个类的方法文档说明或者是函数的参数列表情况? 答: 方法一:直接在需要查询的方法后面加上".__doc__"即可以打印出该方法的文档说明(需要先导入该方法所属模块) ...
- python的小技巧 让你的代码更美观
持续更新.. 1,活用lambda表达式 匿名函数 lambda 可以提供很多便利.下面是举例. dic = {1:lambda a,b : a+b} 2,代码一行化. 当逻辑语句后只有一行代码的时候 ...
随机推荐
- drf 缓存扩展
drf缓存给了一个非常方便的扩展,使用起来相当方便 1- 安装 pip install drf-extensions 2-配置 在settings里面增加两项配置 # drf扩展REST_FRAM ...
- truffle的调用nodeJs的问题
Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误) 升级到Truffle3.0 如果之前安装的是Truffle2.0版本,需要主动升级到Truffle3.0,两者的语法变化有点大 ...
- Reactor模式是什么(转载)
一.Reactor模式是什么反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式.当客户端请求抵达后,服务处理程序使用多路分配 ...
- I/O流任务
一.完成以下链接[https://www.cnblogs.com/zhrb/p/6834084.html]中的任务3.4.5. 3. 字符编码 主要讲解中文乱码问题,FileReader.InputS ...
- 修改CodeSmith中的SchemaExplorer.MySQLSchemaProvider
修改C:\Program Files (x86)\CodeSmith\v6.5\Samples\Projects\CSharp\MySQLSchemaProvider\MySQLSchemaProvi ...
- Windows IRP
IRP(I/O Request Packet),是由IO manager发起的对device的IO请求. 当用户调用系统API,如createFile类似的函数,其实是会交给IO manager来做相 ...
- 使用 Redis的SETNX命令实现分布式锁
使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法. SETNX命令简介 命令格式 SETNX key value 将 key 的值设为 value,当且仅当 key 不存在. 若 ...
- 【题解】HNOI2018寻宝游戏
太厉害啦……感觉看到了正解之后整个人都惊呆了一样.真的很强%%% 首先要注意到一个性质.位运算列与列之间是不会相互影响的,那么我们先观察使一列满足条件的操作序列需要满足什么条件.&0时,不论之 ...
- BZOJ1415: [Noi2005]聪聪和可可 最短路 期望概率dp
首先这道题让我回忆了一下最短路算法,所以我在此做一个总结: 带权: Floyed:O(n3) SPFA:O(n+m),这是平均复杂度实际上为O(玄学) Dijkstra:O(n+2m),堆优化以后 因 ...
- vector创建2维数组
以前我要建立一个二维数组,总是使用 int N=5, M=6; vector<vector<int> > Matrix(N); for(int i =0; i< Matr ...