当前位置: 首页 > 后端技术 > PHP

PHP请求上下文相关知识

时间:2023-03-29 16:51:03 PHP

我们先来了解一下什么是上下文。我们在写文章和句子的时候,总是会考虑一个观点或内容前后的逻辑,这个观点前后的内容都可以看作是它的上下文。它包含上下文的含义。其实代码世界中的context也是这个意思。Context这个词本身就是环境和背景的意思。接下来说说什么是请求上下文?比如我们要用PHP请求一个链接地址,我们通常使用curl来请求,但是curl的配置其实比较复杂,所以我们会使用函数file_get_contents()来快速方便的请求一个链接.然而,很多人可能不知道或没有用过它的上下文参数。实际上,file_get_contents()使用context参数后,不仅可以提交POST请求,还可以定义各种请求头内容。这些东西就是一个请求的上下文,也就是它的执行环境和背景。首先,我们定义一个服务器,这里我们只是输出\$_GET和$_POST的内容。同时我们还打印了$_SERVER,看看是否获取到了请求头。print_r($_SERVER);echo'GETINFO',PHP_EOL;foreach($_GETas$k=>$v){echo$k,':',$v,PHP_EOL;}echoPHP_EOL,PHP_EOL;echo'POSTINFO',PHP_EOL;foreach($_POSTas$k=>$v){echo$k,':',$v,PHP_EOL;}接下来,在我们的测试代码中,使用file_get_contents()进行POST提交。$postdata=http_build_query(['var1'=>'somecontent','var2'=>'doh',]);$opts=['http'=>['method'=>'POST','header'=>'Content-type:application/x-www-form-urlencoded','content'=>$postdata,],];$context=stream_context_create($opts);$result=file_get_contents('http://localhost:8088/?a=1',false,$context);print_r($result);var_dump($http_response_header);在这里,我们只使用stream_context_create()轻松创建请求上下文。stream_context_create()是一个创建上下文环境的函数,它接收的参数是一个选项数组,用于定义当前请求的相关选项。注意,我们这里实际定义的是http/https相关的选项,它还可以定义ftp、socket等相关的请求协议选项。使用file_get_contents()函数请求远程地址后,我们可以在$http_response_header变量中获取请求返回的响应头信息。并且这个变量会在当前局部范围内定义,所以不用担心全局范围污染。POST请求可以用非常简单的方式实现。另外,我们也可以使用fopen()函数来实现类似的效果,只是获取正文和响应响应信息的方式不同。$url="http://localhost:8088/?a=1";$opts=['http'=>['method'=>'GET','max_redirects'=>'0','ignore_errors'=>'1',],];$context=stream_context_create($opts);$stream=fopen($url,'r',false,$context);//返回响应头var_dump(stream_get_meta_data($stream));//返回内容var_dump(stream_get_contents($stream));fclose($stream);在这段代码中,我们使用stream_get_meta_data()函数获取响应头,使用stream_get_contents()获取响应主体。这样一来,效果真的和curl差不多,最主要的是现在的写法更简单方便。从上面的代码我们可以看出,这个上下文相关的函数是一个Stream类型的函数,即流函数。它们旨在处理各种数据,包括但不限于文件中的数据、网络上的数据、压缩文件和其他操作。在以后的学习中,我们还会接触到其他的内容。今天的学习其实就是流式网络数据处理的一小部分,先消化一下吧!测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/%E5%85%B3%E4%BA%8EPHP%E4%B8%AD%E7%9A%84%E8%AF%B7%E6%B1%82%E4%B8%8A%E4%B8%8B%E6%96%87%E7%9A%84%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86.php参考文档:https://www.php.net/manual/zh/context.php各媒体平台可搜索【硬核项目经理】