在网上找了很多curl封装函数和类,发现不是太复杂就是太简单或者功能不全,要么就是命名规范和程序设定以及函数用法不是自己喜欢的风格,我又懒得再去找,所以就花了点时间自己封装了个自认为超级完美且用法简单的curl函数,现在分享出来,希望有人喜欢。
1.1增加了自动解压编码格式和保存cookie文件...
用这个函数实现的HTTP模拟访问工具
https://tool.phpe.top/欢迎访问我的博客
https://3ghh.cn用法1
curl($url)->result;
用法2
curl($url,$post)->result;
用法3
curl($url,'',['USERAGENT'=>'要设定的ua','REFERER'=>'要设定的来源地址','HTTP_HEADER'=>['Accept: */*','Accept-Language: en-us
']])->result; //除了这些还能设定其他的,具体请参考CURL教程
最后一个参数$default如果设为false则关闭默认选项设置
function curl($url, $post = '', $option = [], $default = true)
{
/*
* curl 1.1 3ghh.cn
* @param string $url:url地址
* @param string|array $post:post数据(可选)
* @param null|array $option:扩展选项(可选)
* @param bool $default:默认选项(可选)
* @return ArrayObject echo curl('http://3ghh.cn','',['CONNECTTIMEOUT'=>1])->result;
*/
#初始化
$ch = curl_init();
#选项
//请求的URL
curl_setopt($ch, CURLOPT_URL, $url);
//POST数据
$post == '' ?: curl_setopt($ch, CURLOPT_POST, true) && curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
#固定选项
//不自动打印结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//info中包含请求头 return array
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
//验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//指定协议
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
//自动解压编码格式
curl_setopt($ch, CURLOPT_ACCEPT_ENCODING, '');
if ($default == true) {
#默认选项
//使用浏览器者UA
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//请求超时时间,单位秒
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
//重定向跟踪
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//result中包含响应头部内容
curl_setopt($ch, CURLOPT_HEADER, false);
//result中不包含响应主体内容
curl_setopt($ch, CURLOPT_NOBODY, false);
//设置Cookie文件保存位置
$cookie_file = getcwd() . '/cookie.tmp';//函数调用代码所在脚本的目录
//将请求时得到的Cookie保存 (要保存请将fasle改为$cookie_file)
curl_setopt($ch, CURLOPT_COOKIEJAR, false);
}
if ($option != null && is_array($option)) {
#扩展选项
foreach ($option as $key => $value) {
curl_setopt($ch, constant('CURLOPT_' . $key), $value);
}
}
#执行
$result = curl_exec($ch);
$info = curl_getinfo($ch);
//错误处理
$error = $errno = NULL;
if ($errno = curl_errno($ch)) {
$result = $error = curl_error($ch);
}
#关闭
curl_close($ch);
//创建数组对象
$out = new ArrayObject();
#结果
$out->result = $result;
#信息
$out->info = $info;
#错误代码
$out->errno = $errno;
#错误提示
$out->error = $error;
//返回数组对象
return $out;
}
@灰色头像,第43行那个eval可以换成这样: