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

python

如果面试问你如何用 python 发 get/post 请求? 这种问题只要是个小白花10分钟随便看下博客都能学得会。

面试官如果知道你是资深的,还是初级的呢? 面试其实最喜欢考那些你不常用的功能(工作中用不到的),因为你用不到这些功能,所以会被你忽略!

代理功能

如何用 requests 库使用代理?

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

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

平常多看看官方文档就知道了

import requests

proxies = {

"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 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 使用。

(这个一般也用不到,爬虫的小伙伴爬数据失败的话,会用得上)

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" 即可

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

回到顶部