1.什么是requests?
答:requests是用來發送http請求以及接收http響應的python第三方庫,主要用於做接口自動化。
2.安裝
pip install requests
3.requests常用方法
requests.get(url, params=None, **kwargs) **kwargs可變長度的字典。 requests.post(url, data=None, json=None, **kwargs) requests.put(url, data=None, **kwargs) requests.delete(url, **kwargs) requests.request(method, url, **kwargs) 包含了上面所有的請求
requests的底層方法:
底層方法: session.request() def request(self, method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None):
4.request()返回的response對象
print(res.text) #返回body的text格式 print(res.json()) #返回body的dict格式 print(res.content) #返回body的byte格式 print(res.status_code) #返回狀態碼 print(res.reason) #返回狀態信息 print(res.cookies) #返回響應的cookie信息 print(res.encoding) #返回編碼格式 print(res.headers) #返回響應頭 print(res.request.method) #返回請求的數據
5.json和dict(正常我們看到的都是字典就是json,若使用data傳參,需要把字典轉換成json字符串,若使用json傳參,直接使用對應字典)
字典:dict
JSON:JSON字符串
json.loads() 把json字符串轉化成dict
json.dumps() 把dict轉化成json字符串
6.對應的參數類型:
data: 1.通過data傳參,表示表單傳參,默認的請求頭:Content-Type:application/xwww-from-urlencoded,請求的格式是:a=1&b=2,傳的參數的類型:純鍵值對的字 典。 2.通過data傳參,默認請求頭:text/plain,傳的參數的類型:字符串類型。
json: 1.通過json傳參,默認請求頭:Content-Type:application/json,傳的參數類型:dict字典
files:文件上傳
7.注意:有cookies關聯的接口使用,發送請求都要使用(例:Test_request.session.request)方式發送請求,存在接口關聯的強求一定要注意,請求的方式要一致,我自己寫最后的兩個接口的時候一個使用requests.session.request發送,一個使用get發送,導致無法關聯
import json import random import re import requests class Test_request: access_token = '' csrf_token = '' #使用session傳參會自動關聯cookies session = requests.session() def test_get_token(self): url = "https://地址/cgi-bin/token" data = { "grant_type":"client", "appid":"wx", "secret":"307c" } res = requests.get(url=url,params=data) print(res.json()) Test_request.access_token = res.json()["access_token"] def test_get_mark(self): url = "https://地址/cgi-bin/tags/get" data = { "access_token": Test_request.access_token } res = requests.get(url=url,params=data) print(res.json()) def test_create_mark(self): url = "https://地址/cgi-bin/tags/create?access_token="+Test_request.access_token data ={"tag": {"name": "廣東"+str(random.randint(10,100))}} res = requests.post(url=url,data=json.dumps(data)) print(json.loads(json.dumps(res.json()).replace(r"\\","\\"))) #Unicode默認是一個斜杠,所以要替換 def test_file_mark(self): url = "https://地址/cgi-bin/media/uploadimg?access_token="+Test_request.access_token data = { #"access_token": Test_request.access_token,這樣傳值是錯誤的,要做url中拼接 "media": open(r"D:/Titen/baogao.png",mode="rb") #只要是文件就是要先打開,文件地址1.r"D:/Titen/baogao.png",2.r"D:\\Titen\\baogao.png",都可以 } res = requests.post(url=url,files=data) print(res.json()) def test_shouye_windphp(self): url = "http://地址/pp/" res = Test_request.session.request(method="get",url=url) Test_request.csrf_token= re.search('name="csrf_token" value="(.*?)"',res.text).group(1)#返回網頁中查找 print(Test_request.csrf_token)p def test_login_windphp(self): urls = "http://地址/pp/index.php?m=u&c=login&a=dorun" datas = { "username": "admin", "password": "123456", "csrf_token": Test_request.csrf_token, "backurl": "http://地址/pp/", "invite": "" } headers ={ "Accept":"application/json, text/javascript, /; q=0.01", "X-Requested-With":"XMLHttpRequest" } # res = requests.post(url=url,data=data,headers=header) #這樣操作解決cookies關聯問題 res =Test_request.session.request(method="post", url=urls, data=datas, headers=headers) print(res.text)
每篇一句:
我藏在人群中失去晴空