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相关推荐

  1. java如何模拟请求_单元测试如何模拟用户请求

    python web自动化测试设计构工具书 40.9元 包邮 (需用券) 去购买 > 错误 正当我高高兴兴写完后台c层的测试代码准备提交时,测试机器人报了很多401错误,把代码拉下来一看,原来当 ...

  2. php模拟IP请求,如何在php中利用curl对ip进行模拟

    如何在php中利用curl对ip进行模拟 发布时间:2020-12-24 14:25:08 来源:亿速云 阅读:71 作者:Leah 如何在php中利用curl对ip进行模拟?很多新手对此不是很清楚, ...

  3. php thinkphp curl 模拟post,put,delete,get 请求

    function curl($url,$method,$params,$auth){     //初始化CURL句柄         $curl = curl_init(); curl_setopt( ...

  4. php模拟表单提交登录,PHP模拟表单的post请求实现登录

    'stuid' => $stuid, 'pwd' => $pwd ); $ch = curl_init (); //初始化curl curl_setopt ( $ch, CURLOPT_U ...

  5. 如何模拟POST/PUT/DELETE等请求进行在线HTTP接口测试?

    跨域模拟Post请求,ApiPOST是当前最适合的工具. ApiPOST 是一个可直接生成文档的API调试.管理工具. 它可以突破常规的浏览器跨域瓶颈进行请求(Request)发送,从而模拟用户请求A ...

  6. Jmeter-函数助手-随机函数的使用(模拟1000+个手机用户获取短信验证码)

    如何模拟1000个手机用户登录? 现在很多APP或者网站都需要使用手机号进行登录,那么使用手机号进行登录时,必然就需要"手机号+短信验证码"才可登录成功. 在实际测试过程中,测试人 ...

  7. LoadRunner 参数模拟——快速得到并发用户的进场规则

    LoadRunner 并发时,一般需要进入参数化 用户名或者相关的字段数据,用以满足在并发时无限的接近真实的使用场景: 但当你在设置好参数化的读取规则后,在执行并发场景时,用户并发加载顺序是否确实如你 ...

  8. 一个强大的工具来模拟数百万​​并发用户负载测试:Gryphon

    Gryphon是由网易自主研发的能够模拟千万级别并发用户的一个软件,目的是能够用较少的资源来模拟出大量并发用户,并且能够更加真实地进行压力测试, 以解决网络消息推送服务方面的压力测试的问题和传统压力测 ...

  9. 模拟监控和真实用户体验监测,选哪个?

    终端用户模拟监控,也就是国内俗称的「云拨测」,其低廉的价格以及便捷的部署方法加快了模拟监测的普及速度,但同时也导致了一些误用:很多公司以及用户将模拟监控当做用户的真实访问情况,监控出来的数据很棒,但是 ...

最新文章

  1. 再见了!面试八股文。。。
  2. 维护窗口和停机时间 可用率99.99%
  3. 【排序】插入类排序—(折半)插入排序、希尔排序
  4. 使用HazelCast进行休眠缓存:基本配置
  5. 2020年十大币预测_2020年十大商业智能工具
  6. 对Linux 目录的认识
  7. 电脑系统如何锁定计算机,如何删除“解除计算机锁定”页面?
  8. python小括号、中括号和大括号的区别
  9. 和吴昊一起玩推理 Round 10 (第一季完结篇) —— 终极推理 —— L与夜神月的对话...
  10. 撤销工作表保护原密码_批量解除工作表保护,和批量执行保护一样简单
  11. explain mysql执行顺序_面试前必须知道的MySQL命令【explain】
  12. javascript特效
  13. 人工智能基础:人工智能云服务(Alaas)介绍
  14. Intelligent Reflecting Surface Assisted Secrecy Communication via Joint Beamforming and Jamming
  15. 计算机u盘设备无法启动不了,系统提示“该设备无法启动(代码:10)”,USB设备不能开始工作怎么办?...
  16. DLM learning materials
  17. C++ ARX二次开发视图
  18. 工作1-2年,月薪3000不可怕,可怕的是能力与之相匹配
  19. 2022年华数杯C题插层熔喷非织造材料的性能控制研究数学建模论文及程序
  20. 嵌入式技术(单片机原理)基本概念梳理(保研/考研面试)

热门文章

  1. PC电脑端社交应用设计灵感
  2. 设计干货 | 时尚简约海报模板
  3. 设计素材|C4D别高质量模型包
  4. java线程中的死锁_Java多线程中的死锁 - Break易站
  5. mysql 5.7 源码编译安装_mysql-5.7.*源码编译安装
  6. 五个温度带的分界线_亚热带,暖温带,到底是些什么带?
  7. JDBC中事务、批量操作、大数据类型、获取自动生成的主键、等用法
  8. Linux网络协议:当eBPF遇上Linux内核网络 | Linux内核之旅
  9. Linux文件系统IO:直接IO原理与实现:缓存I/O、直接I/O
  10. 【BP神经网络】使用反向传播训练多层神经网络的原则+“常见问题”