经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
PHP封装请求类实例分析【基于Yii框架】
来源:jb51  时间:2019/10/18 8:33:01  对本文有异议

本文实例讲述了PHP封装请求类。分享给大家供大家参考,具体如下:

1.源码

  1. <?php
  2. namespace app\common\components;
  3. use Yii;
  4. use app\common\services\BaseService;
  5. class HttpClient extends BaseService{
  6. private static $headers = [];
  7. private static $cookie = null;
  8. public static function get($url, $param =[]) {
  9. return self::curl($url, $param,"get");
  10. }
  11. public static function post($url, $param,$extra = [] ) {
  12. return self::curl($url, $param,"post");
  13. }
  14. protected static function curl($url, $param, $method = 'post')
  15. {
  16. $calculate_time1 = microtime(true);
  17. // 初始华
  18. $curl = curl_init();
  19. // 设置url
  20. curl_setopt($curl, CURLOPT_URL, $url);
  21. // 设置为0表示不返回HTTP头部信息
  22. curl_setopt($curl, CURLOPT_HEADER, 0);
  23. // 设置为1返回将curl_exec()获取的信息以字符串返回,而不是直接输出 设置为0返回true/false
  24. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  25. // TRUE 将在安全传输时输出 SSL 证书信息到 STDERR。
  26. curl_setopt($curl, CURLOPT_CERTINFO , true);
  27. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  28. // FALSE 禁止 cURL 验证对等证书
  29. // 交换证书可以在 CURLOPT_CAINFO 选项中设置,CURLOPT_CAPATH中设置证书目录。
  30. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  31. if( isset( Yii::$app->params['curl'] ) && isset(Yii::$app->params['curl']['timeout']) ){
  32. curl_setopt($curl, CURLOPT_TIMEOUT, Yii::$app->params['curl']['timeout']);
  33. }else{
  34. curl_setopt($curl, CURLOPT_TIMEOUT, 5);
  35. }
  36. // array_key_exists — 检查数组里是否有指定的键名或索引
  37. // CURLOPT_USERAGENT在HTTP请求中包含一个"User-Agent: "头的字符串
  38. if(array_key_exists("HTTP_USER_AGENT",$_SERVER)){
  39. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  40. }
  41. // CURLOPT_HTTPHEADER设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100')
  42. if(!empty(self::$headers)){
  43. $headerArr = [];
  44. foreach( self::$headers as $n => $v ) {
  45. $headerArr[] = $n .': ' . $v;
  46. }
  47. curl_setopt ($curl, CURLOPT_HTTPHEADER , $headerArr ); //构造IP
  48. }
  49. // CURLOPT_COOKIE设定 HTTP 请求中"Cookie: "部分的内容。多个 cookie 用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
  50. if( self::$cookie ){
  51. curl_setopt($curl, CURLOPT_COOKIE, self::$cookie);
  52. }
  53. // post处理 :TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。
  54. if ($method == 'post')
  55. {
  56. curl_setopt($curl, CURLOPT_POST, TRUE);
  57. // 如果为数组就变成字符串
  58. if(is_array($param)){
  59. $param = http_build_query($param);
  60. }
  61. // 全部数据使用HTTP协议中的 "POST" 操作来发送。 要发送文件,在文件名前面加上@前缀并使用完整路径。
  62. curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
  63. }else{
  64. //get请求
  65. curl_setopt($curl, CURLOPT_POST, FALSE);
  66. }
  67. // 执行输出
  68. $info = curl_exec($curl);
  69. //log:返回最后一次的错误代码
  70. $_errno = curl_errno($curl);
  71. $_error = '';
  72. if($_errno)
  73. {
  74. // 返回当前会话最后一次错误的字符串
  75. $_error = curl_error($curl);
  76. }
  77. curl_close($curl);
  78. // 花费的时间
  79. $calculate_time_span = microtime(true) - $calculate_time1;
  80. $log = \Yii::$app->getRuntimePath().DIRECTORY_SEPARATOR.'curl.log';
  81. // int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
  82. file_put_contents($log,date('Y-m-d H:i:s')." [ time:{$calculate_time_span} ] url: {$url} \nmethod: {$method} \ndata: ".json_encode($param)." \nresult: {$info} \nerrorno: {$_errno} error: {$_error} \n",FILE_APPEND);
  83. if( $_error ){
  84. return self::_err( $_error );
  85. }
  86. return $info;
  87. }
  88. public static function setHeader($header){
  89. self::$headers = $header;
  90. }
  91. public static function setCookie( $cookie ){
  92. self::$cookie = $cookie;
  93. }
  94. }
  95.  

2.分析

microtime()
函数返回当前 Unix 时间戳的微秒数。
当设置为 TRUE 时,规定函数应该返回一个浮点数,否则返回一个字符串。默认为 FALSE。

详细的各种分析写在代码里面了

3.总结

总结就是get与post差不多(初始化执行关闭) 选项也差不多  就是在方式上面会有些差别!

更多关于Yii相关内容感兴趣的读者可查看jb51专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号