基于curl的php多线程类(异步请求)
来源:http://blog.csdn.net/sunjier/article/details/8375073
- <?php
- /**
- * @name CurlRequest php 请求类
- * @license 基于curl 实现, 可模拟多线程任务
- */
- class CurlRequest
- {
- /**
- * @name 成员变量
- */
- // param
- protected $url; // url参数
- protected $data; // data参数
- // request
- protected $request_url = ''; // 请求地址
- protected $request_data = array(); // 请求参数
- protected $request_timeout = 30; // 请求超时时间(单位秒) 0为无限等待
- /**
- * @name 请求地址
- * @param $url
- */
- public function url($url)
- {
- $this->url = $url;
- $parseUrl = parse_url($url);
- $this->request_url = '';
- $this->request_url .= $parseUrl['scheme']=='https' ? 'https://' : 'http://';
- $this->request_url .= $parseUrl['host'];
- $this->request_url .= $parseUrl['port'] ? ':'.$parseUrl['port'] : ':80';
- $this->request_url .= $parseUrl['path'];
- parse_str($parseUrl['query'], $parseStr);
- $this->request_data = array_merge($this->request_data, $parseStr);
- return $this;
- }
- /**
- * @name 请求数据
- * @param $data 为数组
- */
- public function data($data)
- {
- $this->request_data = array_merge($this->request_data, $data);
- return $this;
- }
- /**
- * @name 请求超时时间
- * @param $timeout 超时, 当timeout 为0 或 flase时, 类为多线程执行
- */
- public function timeout($timeout)
- {
- // $this->request_timeout = (int)$timeout==0 ? 1 : (int)$timeout;
- $this->request_timeout = (int)$timeout;
- return $this;
- }
- /**
- * @name get请求
- * @return mixed [status, data]
- */
- public function get()
- {
- $returnData;
- // 1. 初始化
- $ch = curl_init();
- // 2. 设置选项,包括URL
- $url = $this->request_url.'?'.http_build_query($this->request_data);
- curl_setopt($ch, CURLOPT_HTTPGET, 1); // 请求类型 get
- curl_setopt($ch, CURLOPT_URL, $url); // 请求地址
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 将curl_exec()获取的信息以文件流的形式返回,不直接输出。
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->request_timeout); // 连接等待时间
- curl_setopt($ch, CURLOPT_TIMEOUT, $this->request_timeout); // curl允许执行时间
- // 3. 执行并获取返回内容
- $output = curl_exec($ch);
- if ($output === false)
- {
- $returnData['status'] = 0;
- $returnData['data'] = curl_error($ch);
- }
- else
- {
- $returnData['status'] = 1;
- $returnData['data'] = $output;
- }
- // 4. 释放curl句柄
- curl_close($ch);
- return $returnData;
- }
- /**
- * @name post请求
- * @return mixed [status, data]
- */
- public function post()
- {
- $returnData;
- // 1. 初始化
- $ch = curl_init();
- // 2. 设置选项,包括URL
- curl_setopt($ch, CURLOPT_POST, 1); // 请求类型 post
- curl_setopt($ch, CURLOPT_URL, $this->request_url); // 请求地址
- curl_setopt($ch, CURLOPT_POSTFIELDS, $this->request_data); // 请求数据
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 将curl_exec()获取的信息以文件流的形式返回,不直接输出。
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->request_timeout); // 连接等待时间
- curl_setopt($ch, CURLOPT_TIMEOUT, $this->request_timeout); // curl允许执行时间
- // 3. 执行并获取返回内容
- $output = curl_exec($ch);
- if ($output === false)
- {
- $returnData['status'] = 0;
- $returnData['data'] = curl_error($ch);
- }
- else
- {
- $returnData['status'] = 1;
- $returnData['data'] = $output;
- }
- // 4. 释放curl句柄
- curl_close($ch);
- return $returnData;
- }
- }
基于curl的php多线程类(异步请求)相关推荐
- ajax ashx调试,asp.net——Ajax与ashx异步请求的简单案例
Ajax与ashx异步请求的简单案例: 前台页面(aspx): function gettext() { var intxt = $("#intxt").val(); $.ajax ...
- php 非阻塞post请求,PHP实现的CURL非阻塞调用类
本文实例讲述了PHP实现的CURL非阻塞调用类.分享给大家供大家参考,具体如下: 前面一篇<PHP实现非阻塞模式的方法>文章讲述了PHP中实现非阻塞模式,其实如果只是HTTP的话,直接用C ...
- php实时股票,php基于curl实现的股票信息查询类实例
本文实例讲述了php基于curl实现的股票信息查询类.分享给大家供大家参考,具体如下: 股票信息查询功能我们是需要抓取第三方的数据,然后我们再把这些数据进行分析组成自己想要的,下面我们来看一个php ...
- php curl 超时 毫秒,php使用curl模拟异步请求,毫秒级超时设置
使用curl请求设置超时模拟php异步请求: /** * 1.curl 异步请求不需要等待返回值(秒级) * * @param [type] $url [description] * @return ...
- Python网络请求、JSON转换、多线程、异步IO
在 Python 众多的 HTTP 客户端中,最有名的莫过于 requests . aiohttp 和 httpx . 在不借助其他第三方库的情况下, requests 只能发送同步请求: aioht ...
- vue 拦截器 与 Hutool工具类JWT加密 服务器异步请求
一 异步请求 1.1 请求端 1.2 响应端 二 账号加密 1.3 jwt 工具类的使用 1.4效果图 2.2 vue 操作 接收值存储到电脑 2.3 拦截器 添加到请求头 然后访问浏览器 2. ...
- python django异步访问_初试Ajax异步请求(基于Django框架)
概要: Ajax异步请求数据之前就听朋友提起过,但是之前一直没有什么机会使用这个技术,就没有去了解,后面在做网站评论这一功能时,为了使用户评论之后不用刷新网页就能够看到刚刚评论的数据,所以决定使用Aj ...
- Spring Boot 异步请求和异步调用
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.Spring Boot中异步请求的使用 1.异步请求与同步请求 ...
- html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...
/查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...
最新文章
- JS window对象的top、parent、opener含义介绍 以及防止网页被嵌入框架的代码
- java网格式布局登录界面_Java学习笔记------自己书写的登录界面实例
- 2021HDU多校8 - 7057 Buying Snacks(矩阵快速幂套NTT优化dp)
- 最大独立集 HDU 1068
- session和cookie的区别 session失效
- kubectl命令大全
- Unity3D启动时卡在Loading界面
- ABC三类地址、子网掩码及子网划分
- Discuz!开发之HTML转Discuz代码(bbcode)函数html2bbcode()
- 充分统计(sufficient statistic) 理解
- C++大纲显示:vs将if、for等语句块折叠
- 庄辰超的势能,梁建章的心力
- 手机短信校验(前端js)
- 国内智能手表行业数据浅析
- 王者荣耀觉悟系列(简介)
- 苹果手机投影_智能手机投屏到投影仪
- Qt Designer+PyQt5 控件使用经验(不定时随缘更新)
- 每2天一次付费做自费核酸检测用这3个APP应用让你更方便?
- Linux学习2.0(非markdown编辑)
- 加拿大卫生部依据NNHPD核准Graminex L.L.C.的PollenBerry(R)
热门文章
- Rational Rose正逆向工程(类图转Java代码,Java代码转类图)
- 缓冲池和String池
- linear-gradient与radial-gradient
- FreeMarker语法指南
- Mysql 死锁过程及案例详解之记录锁与间隔锁Record Lock Gap Lock
- 表的插入、更新、删除、合并操作_3_插入新的多条记录
- 服务器销售税率,转销售云服务器税率
- html算术计算,js实现计算器 提供算术表达式求值
- ajax webmethod,JQuery直接调用asp.net后台WebMethod方法
- SRAM(静态随机存储器)