zoukankan      html  css  js  c++  java
  • HTTP的请求和相应以及php实现模拟、curl扩展的使用来模拟访问

    1.处理不同的图片格式 针对图片处理的公共类兼容多种图片类型的处理。

    只要使用不同类型的图片使用不同的imagecreatefrom类型即可实现。

    【重点!!!】 【php实现网络编程】 2.HTTP请求协议【HTTP权威指南已经看了,但是还没有深刻的认识】 HTTP用于规范b/s架构中,浏览器和服务器之间信息数据交换的规则。【超文本传输协议对应的(超文本标记语言和数据)】

    浏览器和服务器之间建立的TCP连接【连接部分需要注意:三次握手已经不说。持久连接本身占用的资源问题(持久连接保证了HTTP传输的顺利)】

    请求的报文信息【request】 (1)请求行【请求数据的第一行,内有三个信息组成:请求方式(http请求的方式:例如get),请求url,协议版本(http/1.1)】 (2)请求头【带浏览器发送请求里的一些状态码:进行标示等等:浏览器信息,cookie等等】【需要使用一个空行标示结束】 (3)请求主体【post方式传输数据时有主体】

    所谓的网络编程就是使用语言来模拟HTTP请求和结果,实现我们需要的效果。

    3.php模拟HTTP请求 在知道HTTP请求的报文之后,使用php来生成这样的请求来进行模拟。 【重点】 【爬虫也是这样通过脚本实现请求和响应结果】 php模拟get请求 (1)先连接上目标服务器【利用php函数:fsocketopen建立一个socket或者internet连接。需要使用ip和端口进行唯一识别】 (2)使用该函数连接服务器之后,返回一个资源【stream流】 对资源和连接有一个比较清晰的认识。【关键是连接,而连接占用服务器资源的问题需要对服务器方面学习】 (3)连接之后,使用请求的报文进行模拟【php生成报文信息】 (4)发送请求【利用刚刚建立的stream数据通道,以及fwrite写入到目标服务器上】

    于是便实现了php模拟一个HTTP请求。【而php脚本又需要浏览器请求才能够运行,所以这里用来模拟HTTP请求的脚本相当于做了一层中间层】

    php来接收响应结果: 使用fgets来接受响应数据【一行行的接收。也是stream的流】 【使用循环来接收fgets的结果:显示全文(使用feof来判断是否到了数据流的结尾)】

    4.HTTP响应信息 响应信息: 【响应行】:协议版本,状态码,状态消息【状态码和状态消息是对应的:用来表示响应结果】 状态码: 200:状态正常 300:请求被重定向 400:not found 500:server内部错误 【响应头】:服务器需要告知浏览器的一些信息【例如文件类型等等】【多行表示,还需要一个空行标示响应头结束】 【相应主体】:在浏览器中用来显示的文件都是相应主体。

    【HTTP报文中需要的换行都需要使用在任何系统中都是换行的 】

    5.php操作响应结果 利用header函数来操作响应头【响应结果中的cookie也可以进行设置】【下载的本质是将原本从服务器上传输过来的数据保存起来(而不是显示):通过响应头来(header函数)管理。(通过header对文件的类型和是否打开进行管理便能实现下载)】 利用echo来操作响应主体【这个不需要太多说,直接输出即可处理】

    6.php模拟post请求【也就是操作请求主体!!】 利用php来模拟一次表单提交。 键值对的形式来形成请求主体的格式。

    只不过在HTTP中的信息中,通过空行来区别,和HTTP的机制本身并没有关系。【只不过需要在请求头里标示请求主体的必要信息:主体类型,主体长度等进行主体限制】 最后使用fwrite来实现数据的发送。

    【重点】 7.curl 【用于专门来模拟HTTP请求,实现各种请求的方式】 【是一个独立的工具:是一个扩展】【php_curl.dll】 curl提供了很多函数来实现HTTP请求的模拟工作

    一整套的函数需要注意使用。 【因为现在的请求基本需要cookie和session,所以curl也需要带着这些会话信息进行模拟请求】

    因为有这样的模拟的过程,所以我们使用验证码防止暴力破解。【通过遍历的方式来确定用户的密码】

    8.控制缓存:

    控制浏览器的缓存:【对浏览器保存页面进行控制】【expire】 在响应头中进行浏览器缓存控制。【使用header进行处理】

    防止盗链【注意请求头中的referer来判断该文件的来源】【进行一次对来源的处理:只有访问的服务器是指定的服务器来说,图片可以被使

    用和访问】

    9.PDO
    另一种php操作mysql或其他数据库的方法
    php data object【php的数据访问对象】
    PDO能够将php用于操作数据库的动作进行抽象处理【数据库抽象层:将数据库的典型操作都抽象出来,使之达到代码公用的效果(不同数据库进行切换,代码并不需要更改)】

    这里就需要封装各种不同数据库的操作方法【(代码层面)实现工厂方法,根据不同的条件进入不同的处理方法】

    使用PDO时,因为PDO是数据对象,所以需要进行实例化和进行各自的调用情况实现。

    PDO对象的使用:
    需要注意数据库操作中语句是否有返回结果来判断使用情况
    (1)执行语句的两种使用情况:
    【语句对象:query()。没有返回结果的话【例如set name gbk之类的】使用exec()】
    (2)针对事物的操作
    PDO有针对事物的方法
    (3)新生成的行的id
    插入行的语句使用获取返回值
    (4)PDO可以传入参数对取出来的结果进行数组方式的限制
    【索引或关联数组来表示结果】
    (5)PDO的预处理
    如果我们需要重复的执行结构相同的sql语句【也就是对一个sql语句中,只有数据是不同的,结构本身是完全一致的】,我们需要对结构相同的语句进行预处理【防止进行重复的工作】
    预处理的原理【将结构相同的部分进行提前编译,将不同的数据部分和结构进行绑定,这样会减少重复性工作】
    具体的实现手段是在不同的数据位置上进行占位,实现对数据的绑定处理
    $sta = $pdo->prepare($sql)方法实现【在sql语句中进行占位,然后再使用$sta->bind进行占位上的变量的绑定处理】
    最后使用execute()方法进行处理
    (6)PDO错误处理机制
    PDO的异常处理也是符合php的异常处理的提示信息进行
    try:监听
    catch:捕获
    exception:进行抛出处理

    10.桶式排序
    先取得最大和最小的数
    然后从小数开始到大数之间所有的数依次形成【所有的数都组成一个新的组合】
    一次次按照想要实现排序的数据在以上获得的组合中出现的次数进行统计处理
    最后对这个组合进行重新处理【将没有出现的数据去掉,出现多次的累计出现】
    这样便能使整个数组获得正常的排序

    【这种处理思路也比较另类】
    【但是使用的场景并不多:对空间的消耗比较大,而且只适用于数的排序】
    【但是要比快速排序更加快,实现起来也比较容易。(使用要排序的数据做新建组合的下标,使用出现次数做数组的值)】
    这样便能实现排序处理
    这就是桶式排序的思路和实现手段


    【注意】
    【php的数组的数据结构是链表结构,当我们知道键名来定位该值,php的处理速度非常快】
    var_export():将数组输出成符合php语法的格式【功能和var_dump类似,但是输出的格式能够支持php要求的数据】【用于将数据保存在文件,并且能够保证符合php要求的情况来保存】


    11.文件处理函数
    除了文件的读写等函数之外的函数
    目录函数,文件函数

    一个比较常见的题目:
    就是读取一个文件夹下的所有文件【使用递归处理:判断文件夹下的文件存在(readdir),还有就是对文件夹的处理】

    //用来遍历一个文件夹下的所有文件

    function deepDir($dir, $deep=0) {
    $dir_open = opendir($dir);
    while(($file = readdir($dir_open)) !== false) {
    echo str_repeat('--', $deep), $file, '<br>';
    //判断当前文件是否是目录
    if (is_dir($dir.'/'.$file) && $file!='.' && $file!='..') {
    //进入继续读取
    deepDir($dir . '/' . $file, $deep+1);
    }
    }
    }
    $dir = 'e:/php1016/apache/htdocs/test';
    deepDir($dir);

  • 相关阅读:
    生产者-消费者模式
    Java中数字操作
    Java中的装箱拆箱
    Java中的匿名类
    JAVA中抽象类的一些总结
    JAVA继承时this和super关键字
    elasticsearch查询
    elasticsearch的映射
    kibana——es的批量操作
    kibana简单使用——elaticsearch的文档,索引的CRUD操作
  • 原文地址:https://www.cnblogs.com/shuoshuren/p/4244908.html
Copyright © 2011-2022 走看看