0.前言
这次我开始学习python的tornado的api开发,然后给自己定义了几个小的功能:
- 只有拥有特殊凭证的人才能访问我们的api
- 传输过程中需要加密
tornado的基本用法,就需要大家自己去学习了,提供一个简单的学习网站:tornado基础教程
1.tornado的web端简单代码
# coding=utf8 import tornado.ioloop import tornado.web import MySQLdb import base64 from Crypto import Random from Crypto.Hash import SHA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5 from Crypto.PublicKey import RSA # class MainHandler(tornado.web.RequestHandler): # def get(self): # self.write("You requested the main page") ##定义get方法还是post方法 class StoryHandler(tornado.web.RequestHandler): #定义了一个class def get(self): #这个定义了一个get方法,这是为了后面重定向用的 self.write("You requested the story ") #这里显示了,get方法应该返回什么值 class MainHandler(tornado.web.RequestHandler): def post(self): #定义了一个post mes = rsa_jiemi(self.get_argument('message')) #这里是调用了后面的一个rsa解密,因为现在传输是加密了
#并且self.get_argument('message'),是toanado里面的一个独立函数,是用来获取post中传输的值
self.set_header("Content-Type", "text/plain") #开始显示要传输什么内容if jianc(mes): #判断
self.write("You wrote " + ver)
else:
self.set_header("Content-Type", "text/plain")
self.write("You don\'t have access to")
##这个是用来应用方法的
application = tornado.web.Application([ #这个是用来应用方法的,tornado里面的方法
(r"/", MainHandler), #这个就是具体来定义了,定义是访问什么目录,并且决定了调用什么class
(r"/story/", StoryHandler),
])
##用来判断,传输过来的message是否在数据库中
def jianc(test): #这里就是开始数据库操作了,实现了又固定的凭证,才能访问我们的api
try:
db = MySQLdb.connect('127.0.0.1','root','','webtest')
cursor = db.cursor()
sql = 'select value from test where value = \'%s\''%test
cursor.execute(sql)
results = cursor.fetchall()
db.commit()
db.close()
#print results
return results
except:
db.rollback()
##这个是对传输数据的一个加密,用rsa解密
def rsa_jiemi(message): #这里是一个rsa的解密
random_generator = Random.new().read #这个随机数一定要,不然就无法解密
with open('master-private.pem') as f: #定义了一个公钥和私钥的路径
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
text = cipher.decrypt(base64.b64decode(message), random_generator)
return text
if __name__ == "__main__":
application.listen(8888) #定义了我们的api端口
tornado.ioloop.IOLoop.instance().start() #这里显示了,我们程序的启动
2.传输端的基本代码
import requests import base64 from Crypto import Random from Crypto.Hash import SHA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5 from Crypto.PublicKey import RSA def main(): user_info = {'message': 'yjy'} #这个是定义了我们传输什么参数过去 user_info['message'] = rsa(user_info['message']) #这里是对我们传输数据进行了加密 r = requests.post("http://192.168.0.33:8888", data=user_info) #这里开始传输数据了 #r = requests.get("http://127.0.0.1:8888/story/1") print r.text #打印了一个回显的值 def rsa(message): #定义了数据的加密 with open('master-public.pem') as f: key = f.read() rsakey = RSA.importKey(key) cipher = Cipher_pkcs1_v1_5.new(rsakey) cipher_text = base64.b64encode(cipher.encrypt(message)) return cipher_text if __name__ == '__main__': main()