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
這個插件其實工作中也用不到,工作中接口都是純接口,這個一般也是爬蟲的小伙伴會很實用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM