验证需要知道requests提交数据的几种方式:
GET 方式:
# get 方式,传递数值可以直接通过url传递:(服务端接受 GET)
requests.get(url='http://127.0.0.1:8000/api/?k1=a1')
# get 方式也可通过参数 params:(服务端接受 GET)
requests.get(url='http://127.0.0.1:8000/api/',params={"K1":'a1'})
POST 方式:(在django中需要注意csrf)
host_data = {
'status' : True,
"data":{
"hostname":'a1.com',
'disk':{'stuts':True,'data':'xxx1'},
'ip':{'ipv4':'192.168.1.2'},
'master':'xiaohua',
}
}
# post 方式则通过data参数将数据传递(单层数据传递):(服务端接受 POST)
requests.post(url='http://127.0.0.1:8000/api/',data=host_data)
JSON方式:
# json 方式传递数据(多层嵌套数据,就必须用json形式传递)(服务端接受 BODY 中)
requests.post(url='http://127.0.0.1:8000/api/',json=host_data,)
# json 获取数据
# if request.method == 'POST':
# info = json.loads(str(request.body, encoding='utf-8'))
# print(info)
HEADERS 方式:
# headers 方式 也是可以传递数据的(服务端接受 META 中,had字段变更为 HTTP_HAD)
requests.post(url='http://127.0.0.1:8000/api/',headers={"had":'this request headers'},)
原理分析:
API接口验证
1.一个认证的key server端 和 client端都必须有这么一个认证key。
2.认证登录的时间限定
3.保存已验证的信息,在以后的验证不能再次登录
client 端:
import requests
import hashlib
import time
# 基于验证的key
au_key = "dawefgdsfsafdsadas"
# 基于验证的时间
au_time = time.time()
# 将验证的key与时间合并成一个字符
au_key_time = "%s|%s"%(au_key,au_time)
# 将合并的字符进行MD5加密
m = hashlib.md5()
m.update(bytes(au_key_time,encoding='utf-8'))
authkey = m.hexdigest()
# 将生成加密的 KEY 与 时间传递至服务端
url = "http://127.0.0.1:8000/index/"
data = {"a":1,'b':"2",'c':3,'d':4}
headers = {'authkey':authkey,'autime':str(au_time)}
a = requests.post(url=url,data=data,headers=headers)
print(a.text)
server 端views:
from django.shortcuts import render,HttpResponse
import hashlib
import time
# Create your views here.
au_list = []
def index(request):
# 与client端一致的验证key
au_key = "dawefgdsfsafdsadas"
# 从请求头中取出client端 加密前的时间
client_au_time = request.META['HTTP_AUTIME']
# 将服务端的key 与 client的时间合并成字符
server_au_key = "%s|%s" % (au_key, client_au_time)
# 然后将字符也同样进行MD5加密
m = hashlib.md5()
m.update(bytes(server_au_key, encoding='utf-8'))
authkey = m.hexdigest()
# 取出client端加密的key
clint_au_key = request.META['HTTP_AUTHKEY']
# 三重验证机制
# 1.超出访问时间5s后不予验证通过。
server_time = time.time()
if server_time - 5 > float(client_au_time):
return HttpResponse("超时!")
# 2.服务端加密的key值 跟 client发过来的加密key比对是否一致?
if authkey != clint_au_key:
return HttpResponse("验证失败!")
# 3.比对当前的key值是否是以前访问过的,访问过的也不予验证通过。
if authkey in au_list:
return HttpResponse("验证码已过期")
# 将成功登陆的key值保存在列表中。
au_list.append(authkey)
return HttpResponse("OK")
1.建立views_api.py文件, 编写foo方法
from django.http import JsonResponse from django.core.paginator import Paginator ,PageNotAnInteger ,EmptyPage from django.views.decorators.csrf import csrf_exempt
def foo(req): return JsonResponse({'status': 0, 'msg': 'success'})
2.urls.py配置接口路径
from backend import views_api
urlpatterns = [ url(r'^api/', views_api.foo), ]
3.调用
访问: http://127.0.0.1:8000/api/foo
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有