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

簡介

  上篇介紹完發送get請求的接口,你們必然聯想到發送post請求的接口也不會太難,被聰明的你又猜到了。答案是對的,雖然發送post請求的參考例子很簡單,可是實際遇到的狀況倒是很複雜的,由於全部系統或者軟件、網站都是從登陸開html

始的,進入這扇門才能夠發現裏邊的奧祕,因此首先介紹的第一個post請求確定是登陸了,但登陸是最難處理的。若是把登陸問題這隻攔路虎解決了,那麼後面問題都迎刃而解。python

help函數

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

python發送get請求接口案例:

 

python發送post請求接口案例:

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

   上一篇,咱們就見識過requests的強大功能和威力。寥寥幾行代碼就能夠實現get和post的請求。介紹到這裏想必大夥都火燒眉毛了,好,那咱們來牛刀小試一下。瀏覽器

一、用上面給的python發送post請求接口案例,稍稍地作個簡單修改,就能夠發個簡單的post 請求安全

二、即可以像官方文檔給出的案例將payload 參數是字典類型(dict),傳到以下圖的 form 裏ide

 

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

一、post 的 body 是 json 類型,也能夠用 json 參數傳入。函數

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

三、返回結果,傳到 data 裏post

 請求頭header

  如今因爲對接口安全性的要求,使得模擬登陸愈來愈複雜,比上邊介紹的基本內容要複雜不少。通常來講登錄只要涉及安全性方面考慮,那麼登錄就會比較複雜。學習

一、以博客園爲例,幾年前模擬登錄,沒有涉及安全性考慮相對簡單。發展到如今其登陸涉及安全性考慮,因此實際的狀況要比上面講的幾個複雜不少,

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

響應結果,而是以其爲例子來講明將請求頭header參數加入到登陸請求接口中。這裏能夠用抓包工具來看其登陸時的請求頭。以下是fiddler工具抓包時登陸的請求頭。

 三、因爲博客園的登陸方式改變了,咱們換一個例子演示。仍是以官方文檔給的網址演示以下

  (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')])")))

 小結

一、因爲這裏是 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')])")))

二、能夠加個參數: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)

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

四、最後結果是 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'}

五、json參數和dict的參數很是相似,都是key-value的形式,它們有何區別,欲知後事如何,且聽下回分解。

相關文章
相關標籤/搜索