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

  • 相关阅读:
    ASP.NET MVC 重点教程一周年版 第二回 UrlRouting
    ASP.NET MVC 重点教程一周年版 第三回 Controller与View
    DynamicData for Asp.net Mvc留言本实例 下篇 更新
    Asp.net MVC视频教程 18 单选与复选框
    使用ASP.NET MVC Futures 中的异步Action
    ASP.NET MVC RC 升级要注意的几点
    ATL、MFC、WTL CString 的今生前世
    msvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
    关于Windows内存的一些参考文章
    Windows访问令牌相关使用方法
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14364701.html
Copyright © 2020-2023  润新知