php curl 模拟Host,php模拟用户请求之CURL
php的curl功能使用之前,首先我们要开启curl模块,如果是windows操作系统只需要打开php_curl.dll既可,如果是linux我们可以单独编译curl然后修改配置文件增加curl.so模块即可,或者重新编译加上选项–with-curl[=DIR];具体的curl安装就不详细j介绍了。有一点要注意要在Windows环境下使用这个模块,libeay32.dll和ssleay32.dll必须放到PATH环境变量包含的目录下。 不用cURL网站上的libcurl.dll。
开启cURL之后php增加的函数如下:
■cURL 函数curl_close — 关闭一个cURL会话
■curl_copy_handle — 复制一个cURL句柄和它的所有选项
■curl_errno — 返回最后一次的错误号
■curl_error — 返回一个保护当前会话最近一次错误的字符串
■curl_exec — 执行一个cURL会话
■curl_getinfo — 获取一个cURL连接资源句柄的信息
■curl_init — 初始化一个cURL会话
■curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄
■curl_multi_close — 关闭一组cURL句柄
■curl_multi_exec — 解析一个cURL批处理句柄
■curl_multi_getcontent — 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
■curl_multi_info_read — 获取当前解析的cURL的相关传输信息
■curl_multi_init — 返回一个新cURL批处理句柄
■curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
■curl_multi_select — 等待所有cURL批处理中的活动连接
■curl_setopt_array — 为cURL传输会话批量设置选项
■curl_setopt — 设置一个cURL传输选项
■curl_version — 获取cURL版本信息
我们可以通过答应函数 get_defined_functions返回的值知道,这些函数表面意思很明确,如果灵活的运用才是今天我们重点要说的内容,curl通常用于php请求接口,返回数据php处理执行不同的流程,这就涉及到服务端api的编写(这里网上可以搜集到很多api,开放平台最基本的就是api数据,例如open.taobao.com)。基本开源框架中都会有相应的curl类库,下面是个个人编写的curl类库,仅供实例教程参考。
平板视图
打印?
001
classcurl
002
{
003
var$RequestType='http';
004
var$ReturnType='json';
005
var$SubmitType='get';
006
var$UrlHost='localhost';
007
var$File='';
008
var$Charset='UTF-8';
009
var$Cookies=array();
010
var$RequestData=array();
011
var$input=array();
012
function__construct($host='',$dir='',$request='get',$protocol='http')
013
{
014
global$_INPUT;
015
$this->input =$_INPUT;
016
$this->setUrlHost($host,$dir);
017
$this->setRequestType($protocol);
018
$this->setSubmitType($request);
019
}
020
021
function__destruct()
022
{
023
}
024
025
publicfunctionsetCharset($charset)
026
{
027
if($charset)
028
{
029
$this->Charset =$charset;
030
}
031
}
032
033
publicfunctionsetUser()
034
{
035
}
036
037
publicfunctioninitPostData()
038
{
039
$this->RequestData =array();
040
}
041
042
publicfunctionsetReturnFormat($format)
043
{
044
if(!in_array($format,array('json','xml','str')))
045
{
046
$format='json';
047
}
048
$this->ReturnType =$format;
049
}
050
051
publicfunctionsetUrlHost($host,$apidir)
052
{
053
$this->UrlHost =$host;
054
$this->ApiDir =$apidir;
055
}
056
publicfunctionsetRequestType($type)
057
{
058
$this->RequestType =$type;
059
}
060
061
publicfunctionsetSubmitType($type)
062
{
063
$this->SubmitType =$type;
064
}
065
066
publicfunctionaddCookie($name,$value)
067
{
068
$this->Cookies[] = COOKIE_PREFIX .$name.'='.$value;
069
}
070
071
publicfunctionaddFile($file)
072
{
073
if(isset($file))
074
{
075
foreach($fileas$var=>$val)
076
{
077
if(is_array($val['tmp_name']))
078
{
079
foreach($val['tmp_name']as$k=>$fname)
080
{
081
$this->RequestData[$var."[$k]"] ="@".$fname.';type='.$val['type'][$k] .';filename='. urlencode($val['name'][$k]);
082
}
083
}
084
else
085
{
086
$this->RequestData[$var] ="@".$val['tmp_name'] .';type='.$val['type'] .';filename='. urlencode($val['name']);
087
}
088
}
089
}
090
}
091
092
publicfunctionaddRequestData($name,$value)
093
{
094
$this->RequestData[$name] =$value;
095
}
096
097
publicfunctionPostContentType($type)
098
{
099
$this->PostContentType =$type;
100
}
101
102
publicfunctionrequest($file)
103
{
104
if('get'==$this->SubmitType &&$this->RequestData)
105
{
106
foreach($this->RequestData AS$k=>$v)
107
{
108
$para.='&'.$k.'='. ($v);
109
}
110
}
111
if(strpos($file,'?'))
112
{
113
$pachar='&';
114
}
115
else
116
{
117
$pachar='?';
118
}
119
$url=$this->RequestType .'://'.$this->UrlHost .'/'.$this->ApiDir .$file.$pachar.'format='.$this->ReturnType .$para;
120
if(DEBUG_MODE)
121
{
122
if(!$file)
123
{
124
$file='index';
125
}
126
hg_debug_tofile($url, 0,date('Y/m/d/') .$this->ApiDir,$file.'.txt');
127
hg_debug_tofile($this->RequestData, 1,date('Y/m/d/') .$this->ApiDir,$file.'.txt');
128
}
129
$ch= curl_init();
130
curl_setopt($ch, CURLOPT_URL,$url);
131
curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
132
if($this->Cookies)
133
{
134
$cookies= implode(';',$this->Cookies);
135
136
curl_setopt($ch, CURLOPT_COOKIE,$cookies);
137
}
138
if($this->RequestType =='https')
139
{
140
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
141
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
142
}
143
if('post'==$this->SubmitType)
144
{
145
curl_setopt($ch, CURLOPT_POST, true);
146
if($this->PostContentType =='string')
147
{
148
$postdata='';
149
foreach($this->RequestData AS$k=>$v)
150
{
151
$postdata.='&'.$k.'='.$v;
152
}
153
}
154
else
155
{
156
$postdata=$this->RequestData;
157
}
158
curl_setopt($ch, CURLOPT_POSTFIELDS,$postdata);
159
}
160
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
161
$ret= curl_exec($ch);
162
$head_info= curl_getinfo($ch);
163
curl_close($ch);
164
if($head_info['http_code']!= 200)
165
{
166
if(DEBUG_MODE)
167
{
168
hg_debug_tofile($head_info, 1,date('Y/m/d/') .$this->ApiDir,$file.'.txt');
169
}
170
return'';
171
}
172
if(DEBUG_MODE)
173
{
174
hg_debug_tofile($ret, 0,date('Y/m/d/') .$this->ApiDir,$file.'.txt');
175
}
176
if($ret=='null')
177
{
178
return'';
179
}
180
$func=$this->ReturnType .'ToArray';
181
$ret=$this->$func($ret);
182
183
return$ret;
184
}
185
privatefunctionjsonToArray($json)
186
{
187
return$ret= json_decode($json,true);
188
}
189
190
//用于将数组直接用json的方式提交到某一个地址
191
publicfunctioncurl_json($url,$data)
192
{
193
$ch= curl_init();
194
curl_setopt($ch, CURLOPT_URL,$url);
195
curl_setopt($ch, CURLOPT_POST, true);
196
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
197
curl_setopt($ch, CURLOPT_POSTFIELDS,'data='.json_encode($data));
198
$response= curl_exec($ch);
199
$head_info= curl_getinfo($ch);
200
if($head_info['http_code']!= 200)
201
{
202
$error=array('return'=>'fail');
203
returnjson_encode($error);
204
}
205
curl_close($ch);//关闭
206
return$response;
207
}
208
209
//直接提交文件到某一地址
210
publicfunctionpost_files($url)
211
{
212
$ch= curl_init();
213
curl_setopt($ch, CURLOPT_URL,$url);
214
curl_setopt($ch, CURLOPT_POST, true);
215
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
216
curl_setopt($ch, CURLOPT_POSTFIELDS,$this->RequestData);
217
$response= curl_exec($ch);
218
curl_close($ch);//关闭
219
return$response;
220
}
221
222
privatefunctionxmlToArray($xml)
223
{
224
return$xml;
225
}
226
227
privatefunctionstrToArray($str)
228
{
229
return$str;
230
}
231
}
猛看这个类库你可能有点茫然,但是对oop熟悉的同志,抓住其中的几个重点方法就看的很明白了。
总结如下:
1、核心方法是request,其他都是辅助设置函数。
2、如果是https请求需要设置curl的参数curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
3、我添加了调试功能,可以在调用这个类之前设置define(‘DEBUG_MODE’, TRUE);hg_debug_tofile这个函数自己写。
4、$_INPUT应该是你的处理的输入数据。
5、此类库只处理了返回json的格式数据,xml和str没处理,此处也应该是按需处理。
6、类库中使用到的常量含义可以参考php手册的curl参数含义。网上有好多中文手册,本站流量有限就不提供下载了。
php curl 模拟Host,php模拟用户请求之CURL相关推荐
- java如何模拟请求_单元测试如何模拟用户请求
python web自动化测试设计构工具书 40.9元 包邮 (需用券) 去购买 > 错误 正当我高高兴兴写完后台c层的测试代码准备提交时,测试机器人报了很多401错误,把代码拉下来一看,原来当 ...
- php模拟IP请求,如何在php中利用curl对ip进行模拟
如何在php中利用curl对ip进行模拟 发布时间:2020-12-24 14:25:08 来源:亿速云 阅读:71 作者:Leah 如何在php中利用curl对ip进行模拟?很多新手对此不是很清楚, ...
- php thinkphp curl 模拟post,put,delete,get 请求
function curl($url,$method,$params,$auth){ //初始化CURL句柄 $curl = curl_init(); curl_setopt( ...
- php模拟表单提交登录,PHP模拟表单的post请求实现登录
'stuid' => $stuid, 'pwd' => $pwd ); $ch = curl_init (); //初始化curl curl_setopt ( $ch, CURLOPT_U ...
- 如何模拟POST/PUT/DELETE等请求进行在线HTTP接口测试?
跨域模拟Post请求,ApiPOST是当前最适合的工具. ApiPOST 是一个可直接生成文档的API调试.管理工具. 它可以突破常规的浏览器跨域瓶颈进行请求(Request)发送,从而模拟用户请求A ...
- Jmeter-函数助手-随机函数的使用(模拟1000+个手机用户获取短信验证码)
如何模拟1000个手机用户登录? 现在很多APP或者网站都需要使用手机号进行登录,那么使用手机号进行登录时,必然就需要"手机号+短信验证码"才可登录成功. 在实际测试过程中,测试人 ...
- LoadRunner 参数模拟——快速得到并发用户的进场规则
LoadRunner 并发时,一般需要进入参数化 用户名或者相关的字段数据,用以满足在并发时无限的接近真实的使用场景: 但当你在设置好参数化的读取规则后,在执行并发场景时,用户并发加载顺序是否确实如你 ...
- 一个强大的工具来模拟数百万并发用户负载测试:Gryphon
Gryphon是由网易自主研发的能够模拟千万级别并发用户的一个软件,目的是能够用较少的资源来模拟出大量并发用户,并且能够更加真实地进行压力测试, 以解决网络消息推送服务方面的压力测试的问题和传统压力测 ...
- 模拟监控和真实用户体验监测,选哪个?
终端用户模拟监控,也就是国内俗称的「云拨测」,其低廉的价格以及便捷的部署方法加快了模拟监测的普及速度,但同时也导致了一些误用:很多公司以及用户将模拟监控当做用户的真实访问情况,监控出来的数据很棒,但是 ...
最新文章
- 再见了!面试八股文。。。
- 维护窗口和停机时间 可用率99.99%
- 【排序】插入类排序—(折半)插入排序、希尔排序
- 使用HazelCast进行休眠缓存:基本配置
- 2020年十大币预测_2020年十大商业智能工具
- 对Linux 目录的认识
- 电脑系统如何锁定计算机,如何删除“解除计算机锁定”页面?
- python小括号、中括号和大括号的区别
- 和吴昊一起玩推理 Round 10 (第一季完结篇) —— 终极推理 —— L与夜神月的对话...
- 撤销工作表保护原密码_批量解除工作表保护,和批量执行保护一样简单
- explain mysql执行顺序_面试前必须知道的MySQL命令【explain】
- javascript特效
- 人工智能基础:人工智能云服务(Alaas)介绍
- Intelligent Reflecting Surface Assisted Secrecy Communication via Joint Beamforming and Jamming
- 计算机u盘设备无法启动不了,系统提示“该设备无法启动(代码:10)”,USB设备不能开始工作怎么办?...
- DLM learning materials
- C++ ARX二次开发视图
- 工作1-2年,月薪3000不可怕,可怕的是能力与之相匹配
- 2022年华数杯C题插层熔喷非织造材料的性能控制研究数学建模论文及程序
- 嵌入式技术(单片机原理)基本概念梳理(保研/考研面试)
热门文章
- PC电脑端社交应用设计灵感
- 设计干货 | 时尚简约海报模板
- 设计素材|C4D别高质量模型包
- java线程中的死锁_Java多线程中的死锁 - Break易站
- mysql 5.7 源码编译安装_mysql-5.7.*源码编译安装
- 五个温度带的分界线_亚热带,暖温带,到底是些什么带?
- JDBC中事务、批量操作、大数据类型、获取自动生成的主键、等用法
- Linux网络协议:当eBPF遇上Linux内核网络 | Linux内核之旅
- Linux文件系统IO:直接IO原理与实现:缓存I/O、直接I/O
- 【BP神经网络】使用反向传播训练多层神经网络的原则+“常见问题”