最近在封装第三方快捷登录授权的组件,基本上都用到了curl请求
cURL库是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,在微信开发、支付、第三方登录中,我们使用它来发送请求
它给我们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS
也经常用于数据采集当中,当然,包括curl
但是并不只有它能采集数据
PHP常用的三种采集方式
file_get_contents()
/**
* @authors ShenYan ([email protected])
* @boke https://qq52o.me
*/
Header('content-type:text/html;Charset=utf-8');
$url = "https://qq52o.me";
$str = file_get_contents($url);
$pattern = '/<title>(.*)<\/title>/';
preg_match($pattern, $str, $data);
var_dump($data[1]);
看着挺简单的吧,但是有些时候可能存在不稳定,请求不到数据的情况
fsockopen()
第二个,经常用于异步请求?没用过这个函数,所以不太了解,看了一下为了服务器安全考虑很多主机商都禁用了PHP的fsockopen
函数
Curl
对于 Curl 的封装,也是十分的简单
第一步:创建 Curl,使用curl_init()
函数,初始化连接句柄
第二步:设置 Curl,使用curl_setopt()
函数,设置 Curl 选项
第三步:执行 Curl,使用curl_exec()
函数,执行并获取结果
第四步:关闭 Curl,使用curl_close()
函数,释放 Curl 连接句柄
cURL的使用场景
爬取网页资源的时候、动态获取接口资源与后端交互、下载FTP服务器里面的文件等,Curl 的参数有很多,用法也很复杂
所以我们可以将平时的 Curl 进行封装,以便后期使用
GET 请求
function getContents($url){
if(!function_exists('curl_init')){
die('curl扩展没有开启');
}
$ua='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.9';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); # https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); # Curl请求返回值以变量储存 而不是直接输出
curl_setopt($ch, CURLOPT_USERAGENT, $ua); # 伪造User-Agent
curl_setopt($ch, CURLOPT_URL, $url); # 请求Url
$response = curl_exec($ch);
curl_close($ch);
//-------请求为空
if(empty($response)){
die("请求错误");
}
return $response;
}
POST 请求
function postContents($url,$postData=array()){
if(!function_exists('curl_init')){
die('curl扩展没有开启');
}
$ua='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.9';
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
curl_setopt($curl, CURLOPT_POST, true); # 设置post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS,http_build_query($postData));
curl_setopt($curl, CURLOPT_URL, $url);
//执行命令
$response = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
//-------请求为空
if(empty($response)){
die("请求错误");
}
return $response;
}
这些只是我的举例说明,是我在封装第三方登录的时候使用的,在实际应用中还需要修改
curl_setopt()
函数将为一个Curl会话设置选项,option 参数是你想要的设置,value 是这个选项给定的值
curl_setopt()
函数具体的参数说明请看菜鸟教程或者脚本之家
好了,我继续优化我的方法去了
好讨厌到处die的,你就不能输出个错误码。。。
@西枫里博客 哦你说的这个die啊,我已经改过了, 😎 curl_error的几个函数