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,代码一行化. 当逻辑语句后只有一行代码的时候 ...
随机推荐
- linux学习总结---web前端③
css3: border-radius opacity: transform: 旋转 rotate 平移translate 缩放scale 扭曲skew transition:转变 强调:开始和结束 ...
- LeetCode 2——两数相加
1. 题目 2. 解答 循环遍历两个链表 若两个链表都非空,将两个链表结点的值和进位相加求出和以及新的进位 若其中一个链表为空,则将另一个链表结点的值和进位相加求出和以及新的进位 然后将每一位的和添加 ...
- Gated Recurrent Unit (GRU)
Gated Recurrent Unit (GRU) Outline Backgr ...
- POJ 1149 PIGS(最大流)
Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock an ...
- C++STL——set
一.相关定义 set 集合,有唯一性,即每一个元素只有一个: 是一个有序的容器,里面的元素都是排序好的: 支持插入,删除,查找等操作. 注意 set中的元素可以是任意类型的,但是由于需要排序,所以元素 ...
- Name node is in safe mode.
刚才启动hadoop,然后执行rm -r命令,出现这个问题,标记为红色的部分意思是namenode是安全节点, [master@hadoop file]$ hadoop fs -rm -r /inp ...
- 【WebService】——SOAP、WSDL和UDDI
WebService的三要素:SOAP.WSDL和UDDI.soap用来描述传递信息的格式,wsdl描述如何访问具体的接口,uddi管理.分发查询WebService. 1.SOAP SOAP Sim ...
- WCF服务全局异常处理机制
服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. ...
- API文档打开显示'已取消到该网页的导航'的解决方法
从网上下载的API,点击目录右边显示框显示“已取消到该网页的导航”.出现这样的问题并不是文档本身的问题,而是文档属性设置的问题. 这时候只要右键文件选择“属性”-在打开的界面中点击“解除锁定”-点击” ...
- Codeforces Round #553 F Sonya and Informatics
题目 题目大意 给定一个长为 $n$($2 \le n \le 100$)的01串 $S$ .对 $S$ 进行 $k$($1 \le k \le 10^9$)次操作:等概率地选取两个下标 $i, j$ ...