python接口自动化40-盘点requests那些不常用(面试经常问)的高级技能
如果面试问你如何用 python 发 get/post 请求? 这种问题只要是个小白花10分钟随便看下博客都能学得会。
面试官如果知道你是资深的,还是初级的呢? 面试其实最喜欢考那些你不常用的功能(工作中用不到的),因为你用不到这些功能,所以会被你忽略!
代理功能
如何用 requests 库使用代理?
如果你没接触过爬虫,其实基本上用不到代理功能。平常公司的网络都是可以正常请求的,很少有这种需要使用代理的场景,当然也有个别公司网络管理的比较严。
requests 库的代理使用,在官方文档给了示例https://requests.readthedocs.io/zh_CN/latest/user/advanced.html#proxies
平常多看看官方文档就知道了
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
import requestsr = 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 使用。
(这个一般也用不到,爬虫的小伙伴爬数据失败的话,会用得上)
import requestsfrom 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"
即可
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
这个插件其实工作中也用不到,工作中接口都是纯接口,这个一般也是爬虫的小伙伴会很实用。
QQ交流群:730246532
以上是 python接口自动化40-盘点requests那些不常用(面试经常问)的高级技能 的全部内容, 来源链接: utcz.com/z/386821.html