php http协议
-
特点
-
c/s模式 (C就是client客户端 S就是serve服务器端)
-
简单快速 通信速度快
-
灵活 允许传输任意类型的数据对象(MIME类型)
-
无连接 服务器处理完请求之后,收到客户端的应答之后,就会断开连接
-
无状态 对于事务的处理有记忆能力,如果后续处理需要前面的信息,需要重传
-
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文件中进行开启
-
curl_init() 建立连接 激活curl的连接功能
-
curl_setOpt() 设置 cURL 传输选项
-
curl_exec 执行与服务器的连接
-
curl_close 关闭资源
curl_setOpt() 常见的参数详情见:https://www.php.net/manual/zh/function.curl-setopt.php
这里介绍几个常用的:
-
curlopt_url:连接对象
-
curlopt_returntransfer:将服务器执行的结果以文件流的形式返回到请求界面
-
curlopt_post:是否才有post方式发起的请求 默认是get
-
curlopt_postfields:用来传递post提交的数据 分为两种 字符串(name=12&age=123) 以及数组形式 array(''=>'',''=>'')
-
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;
}
总结的不是很好 ,欢迎提出宝贵意见,觉得有用的,帮忙转发点赞哦!