三、requests模块访问接口(get/post)

访问接口

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)
原文地址:https://www.cnblogs.com/zhangjx2457/p/13730982.html