websocket协议实现验证码
2011-09-19 18:22
459 查看
常见的验证码功能走的都是http协议,点击一下验证码图片里,图片的src指向一个server端地址,而server端返回的数据为二进制图片文件,这样,验证码图片便生成了并点击一下变化一下了。
websocket协议不太一样,它的返回值并不支持二进制文件,只能传输字符串。但前端其实支持dataUrl,格式类似于<img src="data:image/gif;base64,xxxxxxxxxxxxxxx"> xxxxx为base64位的字符串。所以,可以换个思路在ws协议下也实现验证码功能——在server端将二进制文件编码为base64位的字符串,返回给客户端,客户端将字符串填进img的src属性里,即可实现验证码功能。
python版server端代码大概如下:
=============================================================================
#coding=utf-8
import Image,ImageDraw,ImageFont,cStringIO,base64,random
'''验证码管理器'''
__CODE_COUNT = 4
def createVerificationCode():
allCode = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
code = ""
for i in xrange(__CODE_COUNT):
code += random.choice(allCode)
return code
def getImageBase64Data(code):
text = code
im = Image.new("RGB",(70,25),(0,0,0))
dw = ImageDraw.Draw(im)
dw.text((5,0),text,fill="green",font=ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeSansOblique.ttf',20))
buf = cStringIO.StringIO()
im.save(buf,"gif")
return base64.b64encode(buf.getvalue())
if __name__ == "__main__" verificationCode = createVerificationCode() imageBase64Data = getImageBase64Data(verificationCode) socket.send(imageBase64Data)
===================================================================
客户端如下:
img.src = "data:image/gif;base64,"+ data.imageBase64Data;
====================================================================
websocket协议不太一样,它的返回值并不支持二进制文件,只能传输字符串。但前端其实支持dataUrl,格式类似于<img src="data:image/gif;base64,xxxxxxxxxxxxxxx"> xxxxx为base64位的字符串。所以,可以换个思路在ws协议下也实现验证码功能——在server端将二进制文件编码为base64位的字符串,返回给客户端,客户端将字符串填进img的src属性里,即可实现验证码功能。
python版server端代码大概如下:
=============================================================================
#coding=utf-8
import Image,ImageDraw,ImageFont,cStringIO,base64,random
'''验证码管理器'''
__CODE_COUNT = 4
def createVerificationCode():
allCode = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
code = ""
for i in xrange(__CODE_COUNT):
code += random.choice(allCode)
return code
def getImageBase64Data(code):
text = code
im = Image.new("RGB",(70,25),(0,0,0))
dw = ImageDraw.Draw(im)
dw.text((5,0),text,fill="green",font=ImageFont.truetype('/usr/share/fonts/truetype/freefont/FreeSansOblique.ttf',20))
buf = cStringIO.StringIO()
im.save(buf,"gif")
return base64.b64encode(buf.getvalue())
if __name__ == "__main__" verificationCode = createVerificationCode() imageBase64Data = getImageBase64Data(verificationCode) socket.send(imageBase64Data)
===================================================================
客户端如下:
img.src = "data:image/gif;base64,"+ data.imageBase64Data;
====================================================================
相关文章推荐
- Websocket协议的学习、调研和实现
- nodejs之socket.io模块——实现了websocket协议
- Websocket协议之php实现
- HTML5实现WebSocket协议原理浅析
- WebSocket 结合 Nginx 实现域名及 WSS 协议访问
- Websocket协议的学习、调研和实现
- Jmeter实现WebSocket协议的接口和性能测试方法
- [转] websocket新版协议分析+python实现 & websocket 通信协议
- [转载]websocket最新协议的握手实现
- 游戏网络编程(三)——WebSocket入门及实现自己的WebSocket协议
- 用node实现websocket协议
- 基于node实现websocket协议
- 开源的C#实现WebSocket协议客户端和服务器websocket-sharp组件解析
- websocket新版协议分析+python实现 - 小小的世界
- 服务端使用c++实现websocket协议解析及通信
- WebSocket协议的服务器端.NET实现
- Websocket协议的学习、调研和实现
- Jmeter实现WebSocket协议的接口和性能测试方法
- Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
- 基于Websocket草案10协议的升级及基于Netty的握手实现