Python教程

学习python自动化——接口(requests+鉴权)

本文主要是介绍学习python自动化——接口(requests+鉴权),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、接口概念:传递数据的通道
二、鉴权
  2.1、概念:验证用户是否拥有访问系统的权利
  2.2、session(放到cookie中)(会占用服务器资源)

    2.2.1、session注册鉴权流程
        1)浏览器:我要注册
        2)提交用户名,密码
        3)服务器:数据库无该用户,允许注册,接口处理注册请求,存储用户名和密码到数据库(密码会加密存储)
        4)注册成功
    2.2.2、session登录鉴权流程
        1)浏览器:我要登录
        2)提交用户名,密码
        3)服务器:数据库有该用户,校验密码(拿到密码加密计算然后与数据库对比),密码正确
        4)服务器:创建一个session对象,一般存储在数据库或内存里,把session_id通过响应头Set-cookie字段返回给客户端
        5)浏览器:登录成功从响应头取出Set-cookie字段,设置到下一个接口的请求头当Set-cookie字段中
        6)浏览器:请求其他接口
        7)提交请求参数,Set-cookie会自动携带
        8)服务器:收到请求,从请求报文请求头中获取Cookie,获取session_id与数据库存储的session_id对比,对比一致就处理请求
        9)返回响应数据
  2.3、token(每次登录时的token不同)

    2.3.1、Token鉴权流程
        1)浏览器:我要登录
        2)提交用户名,密码
        3)服务器:验证用户名和密码,根据特定算法生成token,token生成:签名(请求参数排序+用户id+时间戳)
        4)token返回给浏览器
        5)浏览器:获取后端返回的token,保存token请求头中
        6)浏览器:请求其他接口,携带包含token的请求头
        7)提交请求参数,携带token
        8)服务器:收到请求,从请求报文请求头中获取token,解析出用户id,与时间戳,user_agent信息
        9)服务器:通过用户id匹配用户,通过时间戳判断token是否失效,通过user_agent信息判断是否是冒用用户
        10)鉴权通过后,响应数据;鉴权不通过,拦截

三、requests(详见:http://testingpai.com/article/1615615517987)
  3.1、安装

pip install requests

  3.2、使用
    3.2.1、HTTP请求方法:requests都支持
    3.2.2、get请求

      参数传递方式:

        1、放在接口地址后面

import requests
import pprint
url='http://httpbin.org/get?key1=val&key2=val2'
res=requests.get(url=url)
pprint.pprint(res.json())

        2、通过params参数来接收

import requests
import pprint
url = 'http://httpbin.org/get'
data = {'key1':'val','key2':'val2'}
res = requests.get(url=url,params=data)
pprint.pprint(res.json())

    3.2.3、post请求
      1、data参数:默认使用'Content-Type': 'application/x-www-form-urlencoded'类型

import requests
import pprint
url = 'http://httpbin.org/post'
data = {'key1':'val','key2':'val2'}
res = requests.post(url=url,data=data)     #url:接口地址, data=None:请求参数(默认是application/x-wwww-form-urlencode)     
pprint.pprint(res.json())

      2、json参数:默认使用'Content-Type': 'application/json'类型

import requests
import pprint
url = 'http://httpbin.org/post'
data = {'key1':'val','key2':'val2'}
re=requests.post(url=url,json=data)        #url:接口地址,json=None:请求参数(默认是application/json)
pprint.pprint(re.json())

      3、不定长参数:请求头指定了Content-Type类型,不管使用data还是json参数,都会使用headers指定的类型

import requests
import pprint
header = {'Content-Type': 'application/json'}
url = 'http://httpbin.org/post'
data = {'key1':'val','key2':'val2'}
res = requests.post(url=url,data=data,headers=header)      #**kwargs不定长参数,可以自定义参数
pprint.pprint(res.json())

    3.2.4、patch请求:请求数据时只需要请求第一个数据
    3.2.5、put请求:请求数据时需要请求所有数据
  3.3、接口测试要素
    1、url地址
    2、请求参数
    3、请求方法

  3.4、获取请求/响应数据
    1、获取请求头:请求数据.request.headers

print('获取请求头信息:',reponse.request.headers)

    2、获取响应体:请求数据.json()

print('获取响应体信息:',reponse.json())

    3、获取响应头信息:请求数据.headers

print('获取响应头信息:',reponse.headers)

    4、获取cookie信息:请求数据.cookies

print('获取cookie信息:',reponse.cookies)

    5、获取响应状态码:请求数据.status_code

print('获取响应状态码:',reponse.status_code)

  3.5、session鉴权
    1、手动获取:先手动取出响应头中的session_id,再将session_id放到下一个请求接口的请求参数中

import pprint
import requests

login_url = 'https://test.emooc.com:6/public/login'
login_data={'loginAccount':'yangdi',
        'password': 'Ynp0QDE0MDQ=',
        'areaCode': 10,
        'captchaCode': '',
        'deviceType': '10',
        'isAjax': 'true'
      }
res=requests.post(url=login_url,data=login_data)
pprint.pprint(res.json())              #获取响应体
cookie=res.headers['_sessionid4pad_']      #获取响应头,从响应头中取出session_id(根据实际接口的字段取值)

list_url='https://test.emooc.com:6/login/user'
list_data={'isAjax':'true'}
list_res=requests.post(url=list_url,data=list_data,headers={'_sessionid4pad_':cookie})    #将取出的session_id放到下一个接口请求参数中(根据实际接口的字段赋值)
pprint.pprint(list_res.json())

    2、自动获取:用requests的session方法创建一个session对象,session_id会自动保存到session对象中,每次发送请求时带着创建的session对象发送请求

import pprint
import requests
login_url = 'https://test.emooc.com:6/public/login'
login_data={'loginAccount':'yangdi',
        'password': 'Ynp0QDE0MDQ=',
        'areaCode': 10,
        'captchaCode': '',
        'deviceType': '10',
        'isAjax': 'true'
      }
session=requests.session()          #用requests的session方法创建一个session对象,session_id会自动保存到session对象中
res=session.post(url=login_url,data=login_data)        #带着创建的session对象去发送请求
pprint.pprint(res.json())                     #获取响应体

list_url='https://test.emooc.com:6/login/user'
list_data={'isAjax':'true'}
list_res=session.post(url=list_url,data=list_data)      #带着创建的session对象去发送请求
pprint.pprint(list_res.json())                  #获取响应体

  3.5、token鉴权:只能手动获取,先手动获取响应体中的token,再将token放到下一个接口请求的参数中

import requests
import time

login_url = 'https://openapiv5.ketangpai.com/UserApi/login'
login_data = {"email":"1605118090@qq.com",
              "password":"Aa123456",
              "remember":"0",
              "code":"",
              "mobile":"",
              "type":"login",
              "reqtimestamp":int(time.time()*1000)}         #时间戳,实时取,因为收到的那个时间戳是13位的,但获取到是10位的,所有要*1000,在int一下取整
reponse=requests.post(url=login_url,json=login_data)
print(reponse.json())

token=reponse.json()['data']['token']           #获取响应体里data里的token
user_url = 'https://openapiv5.ketangpai.com/UserApi/getUserBasinInfo'
user_data = {"reqtimestamp":int(time.time()*1000)}              #请求参数
user_reponse=requests.post(url=user_url,json=user_data,headers={'token':token})         #查看token传递方法,所以用'token':token,根据项目实际情况,可能传的不是token
print(user_reponse.json())

  3.6、时间戳的处理方式

import time
print(time.time())      #实时取,获取到的是10位的1656083631.65472
这篇关于学习python自动化——接口(requests+鉴权)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!