ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
在请求第三方网络资源时,可以使用CleverPHP提供的HTTP工具类,实现高性能、无阻塞的网络请求。 CleverPHP所有网络请求入口封装在Util工具类下,网络请求函数原型如下。 POST ``` static public function http($urls=[],$method="GET",$postData=[],$headers=[],$httpsConfig=[],$callback=null) ``` GET ``` static function httpGet($urls = [],$headers = [], $httpsConfig = [], $callback = null) ``` ***** 【参数说明】 urls:网络资源地址,支持数组及字符串 postData:POST请求,必须提供 headers:HTTP请求头数据,使用数组来描述。 httpsConfig:当请求为https,可选的配置选项 callback:回调函数 ***** **【使用案例】** **GET提交** ``` $urls=array( "http://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html", "http://beauty-soft.net/blog/ceiba/Ios/20181112/833.html", "http://beauty-soft.net/blog/ceiba/databases/2019-02-18/834.html" ); Util::httpGet($urls,[],[],function($resault){ if ($resault) { $this->writeJson($resault); } }); ``` **POST提交** ``` $postData=array( "name"=>"ceiba", "hobby"=>"Sing a song" ); Util::httpPost("http://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html",$postData,[],[],function($resault){ if ($resault) { $this->writeJson($resault); } }); ``` **HEADER提交** ``` $urls=array( "http://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html", "http://beauty-soft.net/blog/ceiba/Ios/20181112/833.html", "http://beauty-soft.net/blog/ceiba/databases/2019-02-18/834.html" ); $key="v1.2"; $authorization="9BDFwqrqwerfdsafsadfsadfsadf"; $headers = array( 'api-key:'.$key, 'authorization:'.$authorization, ); Util::httpGet($urls,$headers,[],function($resault){ if ($resault) { $this->writeJson($resault); } }); ``` ****提交认证的HTTPS**** 非认证的HTTPS可以通过前面 介绍的方式提交,只需要把http改成https即可。对于需要认证的HTTPS,需要配置httpsConfig参数才可成功提交。 ``` $urls=array( "https://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html", "https://beauty-soft.net/blog/ceiba/Ios/20181112/833.html", "https://beauty-soft.net/blog/ceiba/databases/2019-02-18/834.html" ); $httpsConfig=array( "cacert"=>"/home/wwwroot/ca/cacert.pem" ); Util::httpGet($urls,[],$httpsConfig,function($resault){ if ($resault) { $this->writeJson($resault); } }); ``` **协程版GET和POST** GET ``` $urls=array( "http://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html" ); $headers=array( 'app-token' => "76454fdasfsadfsdafasd", ); $data=\CleverPHP\Common\Tools\RequestHttp::get($urls,$headers); $this->writeJson($data); ``` POST ``` $urls=array( "http://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html" ); $headers=array( 'app-token' => "76454fdasfsadfsdafasd", ); $postData=["name"=>"ceiba"]; $data=\CleverPHP\Common\Tools\RequestHttp::post($urls,$postData,$headers); $this->writeJson($data); ``` ***** **【多线程的提交模式】** 前面介绍网络请求的都是在HTTP Server里的。这些请求是基于单进程的,虽然使用的是异步回调,但如果需要更强悍的网络请求,可采取以下两种方式。 1、使用控制台调用 在控制器下调用Util::httpGet、Util::httpPost方法,都是多进程的,这种方式带来的好处极大地提高性能,适用于对网络请求比较耗时的场景,例如采集数据、下载远程资源等。 ``` namespace App\Commands; use CleverPHP\Controller\Console; use CleverPHP\Common\Db; use CleverPHP\Common\Util; class Orders extends Console{ public function init(){ } public function start($ages=[]) { $urls=array( "http://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html", "http://beauty-soft.net/blog/ceiba/Ios/20181112/833.html", "http://beauty-soft.net/blog/ceiba/databases/2019-02-18/834.html" ); $data=Util::http($urls); var_dump($data); } } ``` 2、在Web里调用多进程 在Http Server也可以直接调用多进程版的网 络请求,方式如下: GET请求 ``` $urls=array( "http://beauty-soft.net/blog/ceiba/linux/2019-02-23/835.html", "http://beauty-soft.net/blog/ceiba/Ios/20181112/833.html", "http://beauty-soft.net/blog/ceiba/databases/2019-02-18/834.html" ); $key="v1.2"; $authorization="9BDFwqrqwerfdsafsadfsadfsadf"; $headers = array( 'api-key:'.$key, 'authorization:'.$authorization, ); Util::httpGetServer($urls,$headers,[],function($resault){ if ($resault) { Cache::set("resault", $resault); } }); $this->writeJson([]); ``` 可以看到,在Http Service调用多进程版的httpGetServer,回调处理事件里,需要做数据持久化。前端页面,需要二次请求所保存的资源。也可以把资源名称保存到数据库。