前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP中的数据采集传输神器-cURL库

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

作者头像
沈唁
发布2018-08-21 15:06:50
1.4K0
发布2018-08-21 15:06:50
举报
文章被收录于专栏:沈唁志沈唁志

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

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

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

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

PHP常用的三种采集方式

file_get_contents()
代码语言:javascript
复制
/**
 * @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 请求

代码语言:javascript
复制
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 请求

代码语言:javascript
复制
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()函数具体的参数说明请看菜鸟教程或者脚本之家

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

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:PHP中的数据采集传输神器-cURL库

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PHP常用的三种采集方式
    • file_get_contents()
      • fsockopen()
        • Curl
        • cURL的使用场景
        相关产品与服务
        主机安全
        主机安全(Cloud Workload Protection,CWP)基于腾讯安全积累的海量威胁数据,利用机器学习为用户提供资产管理、木马文件查杀、黑客入侵防御、漏洞风险预警及安全基线等安全防护服务,帮助企业构建服务器安全防护体系。现支持用户非腾讯云服务器统一进行安全防护,轻松共享腾讯云端安全情报,让私有数据中心拥有云上同等级别的安全体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档