使用Google AppEngine进行验证码

时间:2010-10-15 14:02:43

标签: python google-app-engine captcha

我有一个网站i want to put a custom made captcha,由于布局需要,无法使用在线验证码服务。它运行在谷歌appengine上。 appengine API是否有用于在给定图像上书写字符的东西?

我经历了appengine Python Image API,但似乎没什么帮助。

有关如何在google appengine基础设施上生成验证码的任何建议吗?

5 个答案:

答案 0 :(得分:8)

A quick google search将为您提供大量有关将验证码服务与App Engine应用程序集成的指南。使用reCaptcha的Here's one

答案 1 :(得分:2)

一般情况下,你不能。

Image API旨在转换现有图像,而不是生成新图像。

理论上如果你找到一个纯Python图像创建库,它将在App Engine上运行,但它会很慢。

为什么不利用外部CAPTCHA服务?

答案 2 :(得分:1)

而不是创建自己的impl。我建议使用像reCaptcha这样的可靠服务: http://www.google.com/recaptcha

答案 3 :(得分:1)

我建议使用像reCaptcha这样的第三方服务,但是如果你真的需要提供自己的实现,你可以使用最近推出的用于GAE + Python的Matplotlib来生成你自己的图像。

Matplotlib是Python的绘图库,最近于2012年12月作为GAE的一部分推出。您可以使用Matplotlib来渲染文本,如this example所示。如果您在验证码上有美学限制,您可以使用Matplotlib渲染非常精美的文本和数字。请看this example

答案 4 :(得分:0)

您可以使用以下代码创建Captcha,请注意您必须在类路径中添加commons-lang-2.5.jar。

        String secutiryCode = RandomStringUtils.random(5, new char[]{'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','0','1','2','3','4','5','6','7','8','9'});
        req.getSession().setAttribute("secutiryCode", secutiryCode);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        URL url = new URL("http://util.krispot.com/util/SecurityImage.jpg?secutiryCode=" + secutiryCode);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
            BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
            for(int i = bis.read(); i > -1;i = bis.read()) {
                baos.write(i);
            }
        BufferedOutputStream bos = new BufferedOutputStream(resp.getOutputStream());
        bos.write(baos.toByteArray());
        bos.close();

谢谢你, Navdeep Singh