国庆第三天作业完成程度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了国庆第三天作业完成程度相关的知识,希望对你有一定的参考价值。
一、作业目标
完成API加密功能
二、作业完成度(100%)
1、客户端代码(主要是在django中添加请求头,然后在请求头内动态添加md5和时间)
class BaseClient(object): def __init__(self): self.api = settings.API def post_server_info(self,server_dict): obj=Md5() api_header_val=obj.api_header_val() print(api_header_val) requests.post(self.api,json=server_dict,headers={‘auth-api‘:api_header_val})
import time import hashlib class Md5(object): def __init__(self): self.key=‘wefrefgregffref‘ self.ctime=str(time.time()) self.new_key="%s|%s"%(self.key,self.ctime) def md5(self): hs = hashlib.md5() hs.update(self.new_key.encode(‘utf-8‘)) return hs.hexdigest() def api_header_val(self): return ‘%s|%s‘%(self.md5(),self.ctime)
2、服务器端代码(主要是验证客户端传输过来的MD5值和时间,通过时间上的限制和MD5值得校验来判断该用户传递过来的数据是否合法)
import json from django.shortcuts import render, HttpResponse,redirect from django.views.decorators.csrf import csrf_exempt from api.plugins import PluginsManage from django.db.models import Q from datetime import date from repository import models import hashlib import time import requests @csrf_exempt def server(request): if request.method == ‘GET‘: current_date=date.today() host_list = models.Server.objects.filter( Q(Q(latest_date=None) | Q(latest_date__date__lt=current_date)) & Q(server_status_id=2) ).values(‘hostname‘)[0:200] hostname_list=list(host_list) return HttpResponse(json.dumps(hostname_list)) elif request.method == ‘POST‘: client_info = request.META[‘HTTP_AUTH_API‘] print(client_info) client_md5_str, client_ctime = client_info.split(‘|‘) new_server_str = ‘%s|%s‘ % (key, client_ctime) server_md5_str = md5(new_server_str) server_ctime = time.time() client_ctime = float(client_ctime) if (client_ctime + 5) < server_ctime: return HttpResponse(‘您迟到了‘) elif client_md5_str != server_md5_str: return HttpResponse(‘滚‘) elif client_api_header_val.get(client_md5_str): return HttpResponse(‘请重新访问‘) else: client_api_header_val[client_md5_str] = client_ctime print(3) server_dict = json.loads(request.body.decode(‘utf-8‘)) if not server_dict[‘basic‘][‘status‘]: return HttpResponse(‘臣妾做不到‘) obj = PluginsManage() obj.exec(server_dict) return HttpResponse(‘ok‘) def md5(arg): hs=hashlib.md5() hs.update(arg.encode(‘utf-8‘)) return hs.hexdigest() key=‘wefrefgregffref‘ client_api_header_val={}
三、作业总结
1、今天主要是在原有代码的基础上添加了API验证功能,没什么好总结的。
以上是关于国庆第三天作业完成程度的主要内容,如果未能解决你的问题,请参考以下文章