Python requests 小技巧总结
来源:互联网 发布:linux dd命令 制作iso 编辑:程序博客网 时间:2024/04/29 09:49
关于 Python requests ,在使用中,总结了一些小技巧把,记录下。
1:保持请求之间的Cookies,我们可以这样做。
import requestsself.session = requests.Session()self.session.get(login_url) # 可以保持登录态
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'}
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请求提交数据时,一般先要把python对象转换成json对象。可能很多时候是这样写:
self.session.post(url, data=json.dumps(data))。
其实post有一个默认参数json,可以直接简写成:
self.session.post(url, json=data)
6:写接口请求,debug时,会需要看下代码请求的详细信息,当然我们可以使用fiddler来查看,其实我们自己也可以在代码这样获取debug信息*
import requestsimport loggingimport httplib as http_clienthttp_client.HTTPConnection.debuglevel = 1logging.basicConfig()logging.getLogger().setLevel(logging.DEBUG)requests_log = logging.getLogger("requests.packages.urllib3")requests_log.setLevel(logging.DEBUG)requests_log.propagate = Truerequests.get('https://www.baidu.com')#更好的方法是自己封装一个装饰器,就可以为任意请求函数添加一个debug功能。
7:使用grequests实现异步请求。
pip install grequests
import grequestsurls = [ '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
我们可以这样
# 自定义cookiescookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}session.post('http://wikipedia.org', cookies=cookie)
9:需求确定前后端并行设计时,这时测试并没有办法调用接口,如何做接口测试呢?我们可以使用mock或者是httpretty
import requestsimport httpretty# 模拟返还的状态码@httpretty.activatedef 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.activatedef 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})
详细使用可以查看API_DOC
10:统计一个API请求花费的时间,我们可以使用如下方法
self.session.get(url).elapsed
11:设置请求超时
self.session.get(url, timeout=15)# timeout 仅对连接过程有效,与响应体的下载无关。 # timeout 并不是整个下载响应的时间限制,而是如果服务器在15 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)
关于Python ,requests的小技巧,就是这些。
- Python requests 小技巧总结
- Python requests 技巧总结
- python requests 小爬虫
- python requests用法总结
- python requests用法总结
- python requests 库总结
- python的第一个小爬虫requests
- Python及requests乱码问题的总结
- python requests
- python requests
- Python Requests
- python Requests
- python Requests
- python requests
- Requests-Python
- Python Collection 小技巧
- python小技巧
- Python Collection 小技巧
- HTML5学习_day07(2)--BFC定义
- 简述23种java设计模式之策略模式(strategy)
- WebView详解
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
- java.lang.UnsupportedOperationException 解决方案
- Python requests 小技巧总结
- sql注入 xss跨站脚本攻击 csrf跨站请求伪造
- mapreduce机制及mapreduce任务的分析
- 64位编译 ParaView QT4 64位 总结
- 51nod 1278 相离的圆(二分)
- Android ListView异步加载图片乱序问题,原因分析及解决方案
- JDBC简单操作(三层架构以及简单工厂的实现)
- linux下安装blas和lapack
- 微软LUIS语义理解服务介绍