12-8-协议请求响应画布(验证码制作)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12-8-协议请求响应画布(验证码制作)相关的知识,希望对你有一定的参考价值。

         fwrite(文件句柄,写入内容)         返回值为写入文件的字节长度

                   fopen(文件路径,打开方式)          这个便是文件句柄

                   fclose(文件句柄)              关闭文件句柄

                   文件句柄打开后,可以对文件进行读写操作,关闭文件句柄便不能再对文件进行读写操作了。

 

         copy(被复制文件路径,复制后存放文件的路径)                 复制文件

                   存放位置要包含文件名

 

         unlink(文件路径)              删除文件

                  

         filemtime(文件路径)                 返回制定文件最后被修改的时间,得到一个时间戳

 

         filesize(文件路径)            返回文件的大小,单位字节

 

         关于http的请求协议包:

  1,  请求行(request-line)

    请求方式—请求路径—协议版本

    需要单独占用一行,路径不包括域名

  2,  请求头(request-line)

    本次请求需要用到的所有协议项的集合

    host:指明请求服务器的主机名(域名)

    accept-encoding:gzip指明浏览器所支持的文件压缩编码类型

    accept_charset:浏览器支持的字符集

    referer此次请求来自哪个网址

    accept-language:可以接受的语言类型

    cookie:若有该网站的未过期cookie则代入cookie数据

    user-agent:浏览器的内核信息

    accept:浏览器可以接受的数据类型                        

  3,  空行

    用来分隔请求头和请求数据,表名请求头到此结束

  4,  请求数据(request-line)

    请求的数据存放于此,比如注册账号时输入的个人信息。

        

         使用telnet向服务器发送请求

                   在cmd中:    1,telnet  192.168.148.10  80

                                               2,ctrl+]  进行数据的回显

                                               3,输入请求行、请求头、空行

                            每次telnet发送请求只能单次,再次使用需要重新开启telnet

 

           关于http相应协议包:

  1,  响应行(状态行)

    协议版本、状态码(404:请求资源不存在)、状态描述

           常见状态码:        

    200 ok:请求成功

    302 found:重定向,配合响应头location使用,服务器要求浏览器重新发起一次请求

    404 not found:请求资源不存在

    403 forbidden:没有权限访问该资源

    500 server internet error:服务器内部错误,不能正常进行响应

    独占一行

  2,  响应头(也是一些协议的集合)

    协议的集合

    协议名:值

    server:服务器信息

    date:响应时间

    last-modified:文件最后修改时间

    content-length:响应主体的长度(字节)

    content-type:相应内容的数据类型—text/html  image/png

    location:重定向,浏览器遇到这个选项便立刻跳转,不会解析后面的内容

    refresh:重定向,浏览器遇到这个选项会准备跳转,时间到了便会跳转,继续向下解析

    content-encodeing:文件编码格式

    cache-control:缓存控制,no-cached—不要缓存

  3,  空行

  4,  响应主体(相应数据)

 

  php模拟http响应

 

         通过header()函数

         header(“协议名:协议值”);

           header(“Content-Type:text/html;charset=utf-8”);  设置文件编码

    header(“location:新的url或uri”);  设置跳转,浏览器访问到该行时进行跳转(站内用uri)

    header(“refresh:刷新等待的时间;url=url或uri”)  在等待过程中,后面代码将继续执行

 

 

         验证码

 

                   PHP默认没有处理图片的功能,所以要加载GD库(图片处理扩展)

                            php.ini——extension=php_gd2.dll

 

                   画布:     imagecreate(width,height);    (256种颜色)

                                     imagecreatetruecolor(width,height);     (24位真彩)(一般使用)

 

                   颜色句柄:     imagecolorallocate(img,red,green,blue);

                                                                                    img:画布资源

 

                   绘制文字:     imagestring(img,size,x,y,sting,color);

                                                        size:文字大小

                                                        x、y:起始坐标(左上角为原点)

                                                        string:文字内容

                                                        color:颜色句柄

 

                   image<png|jpeg|gif>(画布资源[,保存路径])

                            输出时要使用header函数设置相应头信息,告诉浏览器这是个图片

                            输出前使用ob_clean()清理数据缓冲区

 

  1,  填充背景

    a)         imagefill(img,x,y,color);            把坐标点颜色相同且连续的区域填色

        img:画布资源

        x、y:坐标点

        color:颜色句柄

  2,  添加干扰线

    a)         imageline(img,x1,y1,x2,y2,color);

  3,  添加噪点(干扰点)

    a)         imagesetpixel(img,x,y,color);

 

  代码实现:

  1.      img = imagecreatetruecolor(170,40);

  2.      backcolor = imagecolorallocate($img,mt_rand(180,255),mt_rand(0,255),mt_rand(180,255));

  3.      imaggefill($img,0,0,$backcolor);

  4.      $arr = array_merge(range(‘A’,’Z’),rang(‘a’,’z’),range(0,9));

  5.      shuffle($arr);

  6.      $rand_keys = arr_rand($arr,4);

  7.      $str = ‘’;

  8.      foreach($rand_key as $value){

           $str .= $arr[$value];

      }

  9.      $span = ceil(170/(4+1));

  10.   for($i=1;$i<=4;$i++){

           $strcolor = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));

                     imagestring($img,5,$i*$span,10,$str[$i-1],$strcolor);

      }

  11.   for($i=1;$i<=6;$i++){

           $linecolor = imagecolorallocate($img,mt_rand(5,100),mt_rand(50,100),mt_rand(0,100));

            imageline($img,mt_rand(0,169),mt_rand(0,39),mt_rand(0,169),mt_rand(0,39),$linecolor);

    }

  12.   for($i=1;$i<=170*40*0.03;$i++){

           $pxcolor = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)

      imagesetpixel($img,mt_rand(0,169),mt_rand(0,39),$pxcolor);

    }

  13.   header(“Content-Type:image/png”);

    ob_clean();

    imagepng($img);

以上是关于12-8-协议请求响应画布(验证码制作)的主要内容,如果未能解决你的问题,请参考以下文章

django框架

HTTP状态码(响应码)

ajax基础6--http请求消息和状态码

Http协议请求头响应头响应码

HTTP协议中request报文请求方法和状态响应码

HTTP协议响应码