python接口自動化(八)--發送post請求的接口(詳解)


簡介

  上篇介紹完發送get請求的接口,大家必然聯想到發送post請求的接口也不會太難,被聰明的你又猜到了。答案是對的,雖然發送post請求的參考例子很簡單,但是實際遇到的情況卻是很復雜的,因為所有系統或者軟件、網站都是從登錄開

始的,進入這扇門才可以發現里邊的奧秘,所以首先介紹的第一個post請求肯定是登錄了,但登錄是最難處理的。如果把登錄問題這只攔路虎解決了,那么后面問題都迎刃而解。

help函數

  上篇介紹發送get請求的接口時,學習requests模塊,是讓大家去訪問官方網站,查看官方文檔;其實學習一個新的模塊捷徑,不用去百度什么的,直接用 help 函數就能查看相關注釋和案例內容。

python發送get請求接口案例:

 

python發送post請求接口案例:

 發送post請求的接口(dict參數)

   上一篇,我們就見識過requests的強大功能和威力。寥寥幾行代碼就可以實現get和post的請求。介紹到這里想必大伙都迫不及待了,好,那我們來牛刀小試一下。

1、用上面給的python發送post請求接口案例,稍稍地做個簡單修改,就可以發個簡單的post 請求

2、便可以像官方文檔給出的案例將payload 參數是字典類型(dict),傳到如下圖的 form 里

 

 發送post請求的接口(json參數)

1、post 的 body 是 json 類型,也可以用 json 參數傳入。

2、先導入 json 模塊,用 dumps 方法轉化成 json 格式。

3、返回結果,傳到 data 里

 請求頭header

  現在由於對接口安全性的要求,使得模擬登錄越來越復雜,比上邊介紹的基本內容要復雜很多。一般來說登陸只要涉及安全性方面考慮,那么登陸就會比較復雜。

1、以博客園為例,幾年前模擬登陸,沒有涉及安全性考慮相對簡單。發展到現在其登錄涉及安全性考慮,所以實際的情況要比上面講的幾個復雜很多,

2、我們在請求數據時也可以加上自定義的headers(通過headers關鍵字參數傳遞)有時候有的特殊的請求必須加上headers頭信息,才回返回響應結果。例如:博客園登錄時,將請求頭 headers添加上,這里不是說博客園登錄必須登錄才能返回

響應結果,而是以其為例子來說明將請求頭header參數加入到登錄請求接口中。這里可以用抓包工具來看其登錄時的請求頭。如下是fiddler工具抓包時登錄的請求頭。

 3、由於博客園的登錄方式改變了,我們換一個例子演示。還是以官方文檔給的網址演示如下

  (1)抓包,查看其請求頭,瀏覽器F12查看

 

 

  Fiddler抓包查看請求頭,結果如下:

  實例代碼和其結果:

 

  遇到問題報錯和解決辦法:

raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /post (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

 小結

1、由於這里是 https 請求,直接發送請求會報錯誤:SSLError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /post (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

2、可以加個參數:verify=False,表示忽略對 SSL 證書的驗證,但是此時仍然會有警告:

InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)

3、這里請求參數 payload 是 json 格式的,用 json 參數傳。將請求頭寫成字典格式,進行傳參。

4、最后結果是 json 格式,可以直接用 r.json 返回 json 數據:

{'args': {}, 'data': '', 'files': {}, 'form': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '0', 'Host': 'httpbin.org', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'}, 'json': None, 'origin': '222.128.10.95, 222.128.10.95', 'url': 'https://httpbin.org/post'}

5、json參數和dict的參數非常類似,都是key-value的形式,它們有何區別,欲知后事如何,且聽下回分解。


免責聲明!

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



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