PHP中的数据采集传输神器-cURL库

最近在封装第三方快捷登录授权的组件,基本上都用到了 curl 请求

cURL 库是一个非常强大的开源库,支持很多协议,包括 HTTP、FTP、TELNET 等,在微信开发、支付、第三方登录中,我们使用它来发送请求

它给我们带来的好处是可以通过灵活的选项设置不同的 HTTP 协议参数,并且支持 HTTPS

也经常用于数据采集当中,当然,包括curl但是并不只有它能采集数据

PHP 常用的三种采集方式

file_get_contents()

/**
 * @authors ShenYan (52o@qq52o.cn)
 * @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()函数具体的参数说明请看菜鸟教程或者脚本之家

好了,我继续优化我的方法去了

2 条评论

发表评论

*