python接口自動化使用requests庫發(fā)送http請求_第1頁
python接口自動化使用requests庫發(fā)送http請求_第2頁
python接口自動化使用requests庫發(fā)送http請求_第3頁
python接口自動化使用requests庫發(fā)送http請求_第4頁
python接口自動化使用requests庫發(fā)送http請求_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第python接口自動化使用requests庫發(fā)送http請求目錄前言一、requests庫二、HTTP請求方法三、發(fā)送GET請求四、發(fā)送POST請求五、獲取響應數(shù)據(jù)六、高級操作6.1文件下載6.2文件上傳6.3SSL證書驗證6.4保持會話6.5requests封裝總結

前言

今天筆者想和大家來聊聊python接口自動化如何使用requests庫發(fā)送http請求,廢話呢筆者就不多說了,直接進入正題。

一、requests庫

什么是Requests?Requests是?Python語?編寫,基于urllib,采?Apache2Licensed開源協(xié)議的HTTP庫。它?urllib更加?便,可以節(jié)約我們?量的?作,完全滿?HTTP測試需求。

安裝:cmd命令行執(zhí)行pipinstallrequests

二、HTTP請求方法

HTTP協(xié)議(HyperTextTransferProtocol),一個基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù),包括html文件、圖像、結果等,即是一個客戶端和服務器端請求和應答的標準。根據(jù)HTTP標準,HTTP請求可以使用多種請求方法。

HTTP0.9:只有基本的文本GET請求,沒有固定的版本號,不支持請求頭。HTTP1.0:完善的請求/響應模型,并將協(xié)議補充完整,定義了三種請求方法:GET,POST和HEAD方法。HTTP1.1:在1.0的基礎上進行更新,新增了五種請求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。HTTP2.0(未普及):請求/響應首部的定義基本沒有改變,只是所有首部鍵必須全部小寫,而且請求行要獨立為:method、:scheme、:host、:path這些鍵值

HTTP請求常用的Get和Post兩種方法:

GET是從服務器上獲取數(shù)據(jù),POST是向服務器傳送數(shù)據(jù)GET請求參數(shù)都顯示在瀏覽器網址上,HTTP服務器根據(jù)該請求所包含URL中的參數(shù)來產生響應內容,也就是說GET請求的參數(shù)是URL的一部分。比如百度requests模塊POST請求參數(shù)是在請求體當中,消息長度沒有限制且以隱式的方式進行傳送,通常用來向HTTP服務器提交量比較大的數(shù)據(jù)(比如請求中包含許多參數(shù)或者文件上傳操作等),請求的參數(shù)包含在Content-Type消息頭里,指明該消息體的媒體類型和編碼

三、發(fā)送GET請求

關鍵代碼:requests.get(url)

參數(shù)說明:若需要傳請求參數(shù),可直接在url后面添加,也可以在調用get()方法時通過關鍵字params傳入,需要注意的是params需要傳入dict(字典)類型。

下面以請求百度為例,發(fā)送get請求:

importrequests

#通過url直接加上請求參數(shù),與通過params傳參效果是一樣的

response=requests.get(url='/swd=requests模塊')

#通過params傳參

response2=requests.get(url='/s',params={"wd":"requests模塊"})

print(response.status_code)#打印狀態(tài)碼

#print(response.text)#獲取響應內容

?運行結果:

C:\software\python\python.exeD:/learn/test.py

200

nishedwithexitcode0

四、發(fā)送POST請求

?關鍵代碼:requests.post(url,data)

參數(shù)說明:可傳dict類型也可傳json類型,dict類型使用關鍵字data傳參,json類型則為使用關鍵字json傳參。若無需傳參可不傳。

register_url=":666/index/register"

#添加請求頭,需要就傳

header={

"Content-Type":"application/json"

#json類型的參數(shù)

json={

"mobile_phone":,

"pwd":"Test1234",

"type":0

#發(fā)送post請求

response=requests.post(url=register_url,json=json,headers=header)

print(response.json())

#打印結果:{'code':200,'msg':'success','password':'321','username':'123'}

?上面舉例為json類型的傳參,json和dict類型的數(shù)據(jù)結構表面上看有點相似,那怎么判斷什么時候用json什么時候用dict呢?只要查看請求頭,需要哪種就傳哪種,表單類型的參數(shù),即Content-Type:application/x-www-form-urlencoded就使用關鍵字data去傳dcit類型的參數(shù),像上面舉例的Content-Type:application/jsonjson類型的參數(shù)一定要使用關鍵字json去傳遞。

五、獲取響應數(shù)據(jù)

常見的屬性:

response.status_code:獲取響應狀態(tài)碼response.cookies:獲取cookiesresponse.headers:獲取頭部信息response.url:獲取urlresponse.text:自動識別文本中的編碼格式進行解碼,但有時候不準確,會出現(xiàn)亂碼response.content.decode(utf-8):response.content,獲取字節(jié)流的數(shù)據(jù),進行decode解碼,默認是utf8response.json():json方法可以將json字符串轉換成對應的python類型的數(shù)據(jù),接口返回的數(shù)據(jù)99%都是json類型的

importrequests

response=requests.get(url='/swd=requests模塊')

#response=requests.get(url='/s',params={"wd":"requests模塊"})

print("這是status_code:{}\n".format(response.status_code))

print("這是cookies:.{}\n".format(response.cookies))

print("這是headers:.{}\n".format(response.headers))

print("這是url:.{}\n".format(response.url))

#print("這是響應頁面文本信息:.{}\n".format(response.text))#因為返回數(shù)據(jù)太長,不作運行

#print("這是獲取的字節(jié)流數(shù)據(jù)decode解碼:.{}\n".format(response.content.decode()))

運行結果:

C:\software\python\python.exeD:/learn/test.py

這是status_code:200

這是cookies:.RequestsCookieJar[CookieBAIDUID=6EC84DD4DE623D1500B3D0E771D1D3FA:FG=1for./,CookieBIDUPSID=6EC84DD4DE623D15C087081CA8B7A6D9for./,CookieH_PS_PSSID=32292_1441_32355_32328_31253_32348_32046_32394_32429_32115_32437for./,CookiePSINO=6for./,CookiePSTM=1596554477for./,CookiedelPer=0for./,CookieBDSVRTM=11for/,CookieBD_CK_SAM=1for/]

這是headers:.{Bdpagetype:3,Bdqid:0xf2cd9ccf00070e08,Cache-Control:private,Ckpacknum:2,Ckrndstr:f00070e08,Connection:keep-alive,Content-Encoding:gzip,Content-Type:text/html;charset=utf-8,Date:Tue,04Aug202515:21:17GMT,P3p:CP=OTIDSPCORIVAOURINDCOM,CP=OTIDSPCORIVAOURINDCOM,Server:BWS/1.1,Set-Cookie:BAIDUID=6EC84DD4DE623D15C087081CA8B7A6D9:FG=1;expires=Thu,31-Dec-3723:55:55GMT;max-age=2147483647;path=/;domain=.,BIDUPSID=6EC84DD4DE623D15C087081CA8B7A6D9;expires=Thu,31-Dec-3723:55:55GMT;max-age=2147483647;path=/;domain=.,PSTM=1596554477;expires=Thu,31-Dec-3723:55:55GMT;max-age=2147483647;path=/;domain=.,BAIDUID=6EC84DD4DE623D1500B3D0E771D1D3FA:FG=1;max-age=31536000;expires=Wed,04-Aug-2115:21:17GMT;domain=.;path=/;version=1;comment=bd,delPer=0;path=/;domain=.,BD_CK_SAM=1;path=/,PSINO=6;domain=.;path=/,BDSVRTM=11;path=/,H_PS_PSSID=32292_1441_32355_32328_31253_32348_32046_32394_32429_32115_32437;path=/;domain=.,Traceid:1596554477018818305017495812540276870664,Vary:Accept-Encoding,X-Ua-Compatible:IE=Edge,chrome=1,Transfer-Encoding:chunked}

這是url:./swd=requests%E6%A8%A1%E5%9D%97

Processfinishedwithexitcode0

六、高級操作

在上面我們基本了解了requests庫的基本用法,如GET、POST請求以及response的屬性,接下來我們再看下requests庫的一些高級用法,如下載/上傳文件、Cookies設置、代理設置等。

6.1文件下載

與發(fā)送請求區(qū)別無二,只是保存時需要處理一下,如下載圖片,把獲取圖片的二進制數(shù)據(jù)然后用二進制寫入文件即可。

importrequests

response=requests.get('/favicon.ico')

#獲取二進制數(shù)據(jù),然后寫入文件

withopen('favicon.ico','wb')asf:

f.write(response.content)

f.close

6.2文件上傳

?關鍵代碼:requests.post(utl,files=files)

importrequests

file={'file':open('favicon.ico','rb')}#將之前抓取的github圖標以二進制格式讀取

response=requests.post('/post',files=file)

print(response.text)

6.3SSL證書驗證

為什么會有SSL證書驗證,SSL是什么?

SSL協(xié)議是網絡層和傳輸層的協(xié)議。SSL(SecureSocketsLayer安全套接層)協(xié)議,及其繼任者TLS(TransportLayerSecurity傳輸層安全)協(xié)議,是為網絡通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。

?HTTPS是兼容HTTP的,可以把HTTPS理解為HTTPoverTSL,即HTTPS是HTTP協(xié)議和TSL協(xié)議的組合。HTTPS在傳輸數(shù)據(jù)時,同樣會先建立TCP連接,建立起TCP連接后,會建立TSL連接。請求可以為HTTPS請求驗證SSL證書,就像我們使用的瀏覽器一樣,SSL驗證默認是開啟的,如果證書驗證失敗,請求會拋出一個SSLError,如下圖:

碰到請求SSL驗證的,我們是可以直接跳過不驗證的,通過設置verify=False就可關閉錯誤提示,跳過SSL驗證,這里只是忽略了SSL驗證,并不是沒有了SSL驗證,它仍然會存在一個警告信息InsecureRequestWarning。

importrequests

#通過一下兩行代碼即可把警報消除,即使verify=False,報警還是存在的

fromrequests.packagesimporturllib3

urllib3.disable_warnings()

response=requests.get('',verify=False)

print(response.status_code)

6.4保持會話

?在requests中,如果直接使用get()或post()等方法是可以做到模擬網頁的接口請求,但是每次發(fā)起請求結束后它就結束了,并不會保存相關的驗證信息,如cookies/token;比如第一次使用post()請求登錄了某個網站,第二次想獲取成功登錄后的用戶個人信息,再一次發(fā)起post()請求時它會要求你需求先登錄,明明第一次請求時已經登錄了,為什么第二次還提示要先登錄呢?實際上兩次請求相當于使用了兩個瀏覽器去訪問,是兩個完全不相關的會話,因此第二次請求是拿不到用戶信息的。

requests中的session對象能夠讓我們跨http請求保持某些參數(shù),即讓同一個session對象發(fā)送的請求頭攜帶某個指定的參數(shù)。當然,最常見的應用是它可以讓cookie保持在后續(xù)的一串請求中。

#創(chuàng)建一個session對象,使它能夠自動記錄上一次請求中的cookie信息

se=requests.session()

#登錄接口

login_url="/api/member/login"

login_data={

"mobilephone":,

"pwd":"Test1234"

res=se.post(url=login_url,data=login_data)

#登錄后查詢用戶最近的訂單記錄

order_record_url="/api/member/order"

record_data={

"beginTime":"2025-07-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論