来源:http://blog.csdn.net/sunjier/article/details/8375073

  1. <?php
  2. /**
  3. * @name CurlRequest php 请求类
  4. * @license 基于curl 实现, 可模拟多线程任务
  5. */
  6. class CurlRequest
  7. {
  8. /**
  9. * @name 成员变量
  10. */
  11. // param
  12. protected $url;         // url参数
  13. protected $data;        // data参数
  14. // request
  15. protected $request_url              = '';       // 请求地址
  16. protected $request_data             = array();  // 请求参数
  17. protected $request_timeout          = 30;       // 请求超时时间(单位秒)  0为无限等待
  18. /**
  19. * @name 请求地址
  20. * @param $url
  21. */
  22. public function url($url)
  23. {
  24. $this->url   = $url;
  25. $parseUrl   = parse_url($url);
  26. $this->request_url   = '';
  27. $this->request_url   .= $parseUrl['scheme']=='https' ? 'https://' : 'http://';
  28. $this->request_url   .= $parseUrl['host'];
  29. $this->request_url   .= $parseUrl['port'] ? ':'.$parseUrl['port'] : ':80';
  30. $this->request_url   .= $parseUrl['path'];
  31. parse_str($parseUrl['query'], $parseStr);
  32. $this->request_data  = array_merge($this->request_data, $parseStr);
  33. return $this;
  34. }
  35. /**
  36. * @name 请求数据
  37. * @param $data 为数组
  38. */
  39. public function data($data)
  40. {
  41. $this->request_data = array_merge($this->request_data, $data);
  42. return $this;
  43. }
  44. /**
  45. * @name 请求超时时间
  46. * @param $timeout 超时, 当timeout 为0 或 flase时, 类为多线程执行
  47. */
  48. public function timeout($timeout)
  49. {
  50. // $this->request_timeout    = (int)$timeout==0 ? 1 : (int)$timeout;
  51. $this->request_timeout   = (int)$timeout;
  52. return $this;
  53. }
  54. /**
  55. * @name get请求
  56. * @return mixed [status, data]
  57. */
  58. public function get()
  59. {
  60. $returnData;
  61. // 1. 初始化
  62. $ch = curl_init();
  63. // 2. 设置选项,包括URL
  64. $url = $this->request_url.'?'.http_build_query($this->request_data);
  65. curl_setopt($ch, CURLOPT_HTTPGET, 1);           // 请求类型 get
  66. curl_setopt($ch, CURLOPT_URL, $url);            // 请求地址
  67. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    // 将curl_exec()获取的信息以文件流的形式返回,不直接输出。
  68. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->request_timeout);    // 连接等待时间
  69. curl_setopt($ch, CURLOPT_TIMEOUT, $this->request_timeout);           // curl允许执行时间
  70. // 3. 执行并获取返回内容
  71. $output = curl_exec($ch);
  72. if ($output === false)
  73. {
  74. $returnData['status']   = 0;
  75. $returnData['data']     = curl_error($ch);
  76. }
  77. else
  78. {
  79. $returnData['status']   = 1;
  80. $returnData['data']     = $output;
  81. }
  82. // 4. 释放curl句柄
  83. curl_close($ch);
  84. return $returnData;
  85. }
  86. /**
  87. * @name post请求
  88. * @return mixed [status, data]
  89. */
  90. public function post()
  91. {
  92. $returnData;
  93. // 1. 初始化
  94. $ch = curl_init();
  95. // 2. 设置选项,包括URL
  96. curl_setopt($ch, CURLOPT_POST, 1);                  // 请求类型 post
  97. curl_setopt($ch, CURLOPT_URL, $this->request_url);   // 请求地址
  98. curl_setopt($ch, CURLOPT_POSTFIELDS, $this->request_data);   // 请求数据
  99. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        // 将curl_exec()获取的信息以文件流的形式返回,不直接输出。
  100. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->request_timeout);    // 连接等待时间
  101. curl_setopt($ch, CURLOPT_TIMEOUT, $this->request_timeout);           // curl允许执行时间
  102. // 3. 执行并获取返回内容
  103. $output = curl_exec($ch);
  104. if ($output === false)
  105. {
  106. $returnData['status']   = 0;
  107. $returnData['data']     = curl_error($ch);
  108. }
  109. else
  110. {
  111. $returnData['status']   = 1;
  112. $returnData['data']     = $output;
  113. }
  114. // 4. 释放curl句柄
  115. curl_close($ch);
  116. return $returnData;
  117. }
  118. }

基于curl的php多线程类(异步请求)相关推荐

  1. ajax ashx调试,asp.net——Ajax与ashx异步请求的简单案例

    Ajax与ashx异步请求的简单案例: 前台页面(aspx): function gettext() { var intxt = $("#intxt").val(); $.ajax ...

  2. php 非阻塞post请求,PHP实现的CURL非阻塞调用类

    本文实例讲述了PHP实现的CURL非阻塞调用类.分享给大家供大家参考,具体如下: 前面一篇<PHP实现非阻塞模式的方法>文章讲述了PHP中实现非阻塞模式,其实如果只是HTTP的话,直接用C ...

  3. php实时股票,php基于curl实现的股票信息查询类实例

    本文实例讲述了php基于curl实现的股票信息查询类.分享给大家供大家参考,具体如下: 股票信息查询功能我们是需要抓取第三方的数据,然后我们再把这些数据进行分析组成自己想要的,下面我们来看一个php ...

  4. php curl 超时 毫秒,php使用curl模拟异步请求,毫秒级超时设置

    使用curl请求设置超时模拟php异步请求: /** * 1.curl 异步请求不需要等待返回值(秒级) * * @param  [type] $url [description] * @return ...

  5. Python网络请求、JSON转换、多线程、异步IO

    在 Python 众多的 HTTP 客户端中,最有名的莫过于 requests . aiohttp 和 httpx . 在不借助其他第三方库的情况下, requests 只能发送同步请求: aioht ...

  6. vue 拦截器 与 Hutool工具类JWT加密 服务器异步请求

    一   异步请求 1.1 请求端  1.2 响应端 二 账号加密 1.3 jwt 工具类的使用 1.4效果图 2.2 vue 操作 接收值存储到电脑 2.3 拦截器 添加到请求头 然后访问浏览器 2. ...

  7. python django异步访问_初试Ajax异步请求(基于Django框架)

    概要: Ajax异步请求数据之前就听朋友提起过,但是之前一直没有什么机会使用这个技术,就没有去了解,后面在做网站评论这一功能时,为了使用户评论之后不用刷新网页就能够看到刚刚评论的数据,所以决定使用Aj ...

  8. Spring Boot 异步请求和异步调用

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.Spring Boot中异步请求的使用 1.异步请求与同步请求 ...

  9. html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...

    /查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...

最新文章

  1. JS window对象的top、parent、opener含义介绍 以及防止网页被嵌入框架的代码
  2. java网格式布局登录界面_Java学习笔记------自己书写的登录界面实例
  3. 2021HDU多校8 - 7057 Buying Snacks(矩阵快速幂套NTT优化dp)
  4. 最大独立集 HDU 1068
  5. session和cookie的区别 session失效
  6. kubectl命令大全
  7. Unity3D启动时卡在Loading界面
  8. ABC三类地址、子网掩码及子网划分
  9. Discuz!开发之HTML转Discuz代码(bbcode)函数html2bbcode()
  10. 充分统计(sufficient statistic) 理解
  11. C++大纲显示:vs将if、for等语句块折叠
  12. 庄辰超的势能,梁建章的心力
  13. 手机短信校验(前端js)
  14. 国内智能手表行业数据浅析
  15. 王者荣耀觉悟系列(简介)
  16. 苹果手机投影_智能手机投屏到投影仪
  17. Qt Designer+PyQt5 控件使用经验(不定时随缘更新)
  18. 每2天一次付费做自费核酸检测用这3个APP应用让你更方便?
  19. Linux学习2.0(非markdown编辑)
  20. 加拿大卫生部依据NNHPD核准Graminex L.L.C.的PollenBerry(R)

热门文章

  1. Rational Rose正逆向工程(类图转Java代码,Java代码转类图)
  2. 缓冲池和String池
  3. linear-gradient与radial-gradient
  4. FreeMarker语法指南
  5. Mysql 死锁过程及案例详解之记录锁与间隔锁Record Lock Gap Lock
  6. 表的插入、更新、删除、合并操作_3_插入新的多条记录
  7. 服务器销售税率,转销售云服务器税率
  8. html算术计算,js实现计算器 提供算术表达式求值
  9. ajax webmethod,JQuery直接调用asp.net后台WebMethod方法
  10. SRAM(静态随机存储器)