前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python接口自动化40-盘点requests那些不常用(面试经常问)的高级技能

python接口自动化40-盘点requests那些不常用(面试经常问)的高级技能

作者头像
上海-悠悠
发布2021-03-03 15:17:57
发布2021-03-03 15:17:57
68300
代码可运行
举报
运行总次数:0
代码可运行

前言

如果面试问你如何用 python 发 get/post 请求? 这种问题只要是个小白花10分钟随便看下博客都能学得会。 面试官如果知道你是资深的,还是初级的呢?面试其实最喜欢考那些你不常用的功能(工作中用不到的),因为你用不到这些功能,所以会被你忽略!

代理功能

如何用 requests 库使用代理? 如果你没接触过爬虫,其实基本上用不到代理功能。平常公司的网络都是可以正常请求的,很少有这种需要使用代理的场景,当然也有个别公司网络管理的比较严。

requests 库的代理使用,在官方文档给了示例https://requests.readthedocs.io/zh_CN/latest/user/advanced.html#proxies 平常多看看官方文档就知道了

代码语言:javascript
代码运行次数:0
运行
复制
import requestsproxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080",
}requests.get("http://example.org", proxies=proxies)

关于 https 证书

https 请求需用到 SSL 证书,平常我都是教大家简单省事一点,设置 verify=False 来忽略 SSL 证书的校验。 但是面试嘛,上面说到,你越是忽略的东西,它越是喜欢问你(其实没卵用,了解下什么是 SSL 证书就行了)

如果你本地已经有了证书,也可以指定本地的证书

获取响应时间

关于如何获取接口的响应时间,可以关注我前面这篇https://www.cnblogs.com/yoyoketang/p/8035428.html

响应时间的正确姿势应该是:r.elapsed.total_seconds(),单位是s

timeout超时

如果我们想设置timeout超时,设置超时为1s,那么就会抛出这个异常:requests.exceptions.ConnectTimeout: HTTPConnectionPool

代码语言:javascript
代码运行次数:0
运行
复制
import requests
r = requests.get("http://cn.python-requests.org/zh_CN/latest/", timeout=1)
print(r.elapsed)
print(r.elapsed.total_seconds())
print(r.elapsed.microseconds)

超时重试

如果跟主机连接失败超时后,我希望能再主动尝试连接几次,避免一超时就失败了,可以参考前面这篇https://www.cnblogs.com/yoyoketang/p/12961469.html

Requests 自带了一个传输适配器,也就是 HTTPAdapter。这个适配器使用了强大的 urllib3,为 Requests 提供了默认的 HTTP 和 HTTPS 交互。 每当 Session 被初始化,就会有适配器附着在 Session 上,其中一个供 HTTP 使用,另一个供 HTTPS 使用。 (这个一般也用不到,爬虫的小伙伴爬数据失败的话,会用得上)

代码语言:javascript
代码运行次数:0
运行
复制
import requests
from requests.adapters import HTTPAdapter
s = requests.session()
# 上海-悠悠 QQ交流群:717225969# max_retries=3 重试3次
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))url = "https://www.github.com/"
r = s.request("GET", url=url, timeout=15)
print(r.text)

这样每次请求超时15s,超时后会重试3次,最大请求时长45s.

Ajax 异步请求

什么是异步请求,什么是同步请求?

Ajax 即 “Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

可以参考前面这篇https://www.cnblogs.com/yoyoketang/p/14278002.html

添加头部参数 "X-Requested-With": "XMLHttpRequest" 即可

代码语言:javascript
代码运行次数:0
运行
复制
url = "http://49.235.x.x:8081/zentao/user-login.html"
h = {
"X-Requested-With": "XMLHttpRequest"
}body = {
"account": "admin",
"password": "yoyo123456",
"passwordStrength": 1,
"referer": "/zentao/",
"verifyRand": "1014015280",
"keepLogin": 1
}r = requests.post(url, headers=h, data=body)
print(r.text)

requests 库一些常用插件

如何真正的模拟浏览器请求,渲染整个页面?

requests库发请求的时候,不会加载页面的js和css,所以并不是真正意义上的模拟浏览器发请求,很多新手以为等价于浏览器发请求。

requests-html终于可以支持JavaScript了,这就相当于是一个真正意义上的无界面浏览器了。 中文文档地址:https://cncert.github.io/requests-html-doc-cn/#/

也可以参考我前面这篇https://www.cnblogs.com/yoyoketang/p/10663392.html 这个插件其实工作中也用不到,工作中接口都是纯接口,这个一般也是爬虫的小伙伴会很实用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 代理功能
  • 关于 https 证书
  • 获取响应时间
  • timeout超时
  • 超时重试
  • Ajax 异步请求
  • requests 库一些常用插件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档