zoukankan      html  css  js  c++  java
  • python接口自动化40-盘点requests那些不常用(面试经常问)的高级技能

    前言

    如果面试问你如何用 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
    这个插件其实工作中也用不到,工作中接口都是纯接口,这个一般也是爬虫的小伙伴会很实用。

  • 相关阅读:
    js学习之函数
    面试题
    渐进增强(progressive enhancement)、优雅降级(graceful degradation)
    倒计时
    css 平行四边形
    网址URL分解
    图片延时加载
    获取元素的宽高,左边距上边距
    电商平台放大镜效果
    js笔记
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14364701.html
Copyright © 2011-2022 走看看