php HTTP协议的粗略理解和总结(curl的使用示例)

php http协议

  • 特点

  1. c/s模式  (C就是client客户端 S就是serve服务器端)

  2. 简单快速 通信速度快

  3. 灵活 允许传输任意类型的数据对象(MIME类型)

  4. 无连接 服务器处理完请求之后,收到客户端的应答之后,就会断开连接

  5. 无状态 对于事务的处理有记忆能力,如果后续处理需要前面的信息,需要重传

  • HTTP分类

    • 响应协议:服务器向浏览器发起响应的时候需要遵循的协议
    • 请求协议:浏览器向服务器发起请求的时候需要遵循的协议
  • 常见的http响应设置和使用

    • location:重定向 立即跳转 响应体不用解析

    • refresh:重定向 立即跳转 响应体会解析

    • content-type:内容类型 MIME类型

    • content-disposition MIME类型拓展

  • 例:

header('Location:文件.php');//立即重定向

header('Refresh:3;url=文件.php');//3秒后重定向
//激活浏览器文件下载对话框 将文件下载到本地
header('Content-disposition:attachment;filename=carrot.jpg');

响应协议:

1.请求行:

* 形式: 请求方式 资源路径 协议版本号

* GET/index.php HTTP/1.1

* 独占一行

2.请求头:各项协议的内容

* Host:请求的主机地址

* Accept:当前请求能够接收服务器返回的类型(MIME类型)

* Accept-Language:接收的语言

* User-Agent:客户浏览器所在点的一些信息

* 不固定数量 每个请求协议独占一行 最后会有一行空行

3.请求体:

* 只有POST请求才会有请求体


响应协议:

1.响应行

* 形式:协议版本号 状态码 状态信息

* 403 无权限访问

* 200 成功

* 404 找不到

* 500 服务器内部错误

2.响应头

* 时间 服务器 内容长度 内容类型

3.响应体

* 实际服务器响应给浏览器的内容


php模拟http请求:(curl库)

首先要在php.ini文件中进行开启

  1. curl_init() 建立连接 激活curl的连接功能

  2. curl_setOpt() 设置 cURL 传输选项

  3. curl_exec 执行与服务器的连接

  4. curl_close 关闭资源


   

 curl_setOpt() 常见的参数详情见:https://www.php.net/manual/zh/function.curl-setopt.php

     这里介绍几个常用的:

  1. curlopt_url:连接对象

  2. curlopt_returntransfer:将服务器执行的结果以文件流的形式返回到请求界面

  3. curlopt_post:是否才有post方式发起的请求 默认是get

  4. curlopt_postfields:用来传递post提交的数据 分为两种 字符串(name=12&age=123) 以及数组形式 array(''=>'',''=>'')

  5. curlopt_header: 是否得到响应的header信息 默认不获取

     操作实例:

//开启会话
header('Content-type:text/html;charset=utf-8');
$ch = curl_init();

//设置选项
curl_setopt($ch,CURLOPT_URL,'localhost/phpLearn/uploads/one_upload.html');//设置url
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//返回数据
curl_setopt($ch,CURLOPT_HEADER,0);//是否获取响应头的信息  0否 1是


//如果要使用post
curl_setopt($ch,CURLOPT_POST,TRUE);//使用POST
curl_setopt($ch,CURlOPT_POSTFIELDS,array());//post提交的数据 存在数组里面



//执行连接
 $content = curl_exec($ch);//
//关闭连接
curl_close($ch);

这边封装了一个方法,用于日常开发进行post提交数据的时候可以调用,传的参数只需要提交的地址和提交的数据内容(数组)

function post_json_data($url, $data_string)
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8',
                'Content-Length: ' . strlen($data_string))
        );
        ob_start();
        curl_exec($ch);
        $return_content = ob_get_contents();
        ob_end_clean();
        $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        return $return_content;
    }

总结的不是很好 ,欢迎提出宝贵意见,觉得有用的,帮忙转发点赞哦!

猜你喜欢

转载自blog.csdn.net/zhangzeshan/article/details/88846350