访问接口
excel: openpyxl
requests:python 当中访问http
一、安装requests
cmd命令:pip install requests
扩展:
Requests库中有7个主要的函数,分别是 request() 、get() 、 head() 、post() 、put() 、patch() 、delete() 。这七个函数中request()函数是其余六个函数的基础函数,其余六个函数的实现都是通过调用该函数实现的。
可以利用 response.raise_for_status() 语句去捕捉异常,该语句在方法内部判断r.status_code是否等于200,如果不等于,则抛出异常。
try: response=requests.get(url) response.raise_for_status() #如果状态不是200,则引发异常 except: print("产生异常")
二、发送GET请求
import requests # 发送get请求,需要传递参数,URL url_1 = 'http://api.keyou.site:8000/interfaces/' res = requests.get(url_1) # 请求interface数据 headers = { "Authorization":"JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImxlbW9uMSIsImV4cCI6MTU5MTcwMTA2OSwiZW1haWwiOiJsZW1vbjEwMEBxcS5jb20ifQ.zPlnFGKfpGfcp-c2Ahiq3QsYoFkHywRu-Fw2fKgIzs0" } res = requests.get(url_1,headers=headers) # 响应对象 print(res) # 响应状态吗 print(res.status_code) # 获取返回的数据(获取文本,返回字符串格式) print(res.text) # 返回二进制数据(图片类型都是二进制形式) print(res.content) # 经常使用json(返回的是字典格式dict) # 注意:如果接口返回的不是json格式,要使用text,否则会报错 print(res.json())
三、发送POST请求
发送参数的方式
-
URL:?=query string 查询字符串 GET请求使用的是query string
-
放在请求体body中:form-data 、raw:里面用json的格式
-
放在请求头header中
根据接口文档选择数据传输格式
1)form表单格式传输数据
import requests #发送post请求 url = 'http://api.keyou.site:8000/user/login/' #发送form表单格式数据 user_info= { "username":"lemon1", "password":"123456" } res = requests.post(url,data = user_info)#data关键字参数,表示form表单格式数据,data关键字把content-Type设置成form格式 #获取响应信息 print(res) print(res.text) print(res.content) print(res.json())
2)发送json格式数据
import requests #发送post请求 url = 'http://api.keyou.site:8000/user/login/' user_info= { "username":"lemon1", "password":"123456" } #发送form表单格式数据 # res = requests.post(url,data = user_info) #发送json格式数据, res = requests.post(url,json=user_info) # json关键字把content-Type设置成application/json格式 #获取响应信息 print(res) print(res.text) print(res.content) print(res.json())
3)url中用query string中传参
import requests #发送post请求 url = 'http://api.keyou.site:8000/user/login/' user_info= { "username":"lemon1", "password":"123456" } #发送query string res = requests.post(url,params = user_info) #获取响应信息 print(res) print(res.text) print(res.content) print(res.json())
4)获取response信息
import requests url_1 = 'http://api.keyou.site:8000/interfaces/' url_2 = 'http://api.keyou.site:8000/user/login/' user={ "username":"lemon1", "password":"123456" } # 获取token res = requests.post(url_2,data=user) res_data = res.json() token = res_data['token'] # 访问interface接口 headers = { "Authorization":"JWT {}".format(token) } res = requests.get(url_1,headers=headers) print(res.json())
四、requests封装
import logging import requests # 访问接口封装 def visit( url, params=None, data=None, json=None, method='get', **kwargs ): '''访问接口,返回字典 res.json()''' res = requests.request(method,url,params=params, data=data,json=json,**kwargs) try: return res.json() except Exception as e: logging.error("返回数据不是json格式:{}".format(e)) return None if __name__ == '__main__': # 参数关联 url_1 = 'http://api.keyou.site:8000/user/login/' url_2 = 'http://api.keyou.site:8000/interfaces/' info = { "username": "lemon1", "password": "123456" } user_info = visit(url_1,method='post',json=info) token = user_info['token'] # 传递token headers = { "Authorization": "JWT {}".format(token) } data = visit(url_2,method='get',headers=headers) print(data)