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()函数具体的参数说明请看菜鸟教程或者脚本之家

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nnngu

01 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之业务分析与DAO层

项目源代码:https://github.com/nnngu/nguSeckill ---- 这是一个整合IDEA+Maven+SSM框架的高并发的商品秒杀项...

39480
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第二十五天 Maven学习一【悟空教程】

解决方案:maven对项目生命周期进行定义,规范,开发人员和测试人员使用maven软件完成构建。

14630
来自专栏前端之路

http状态码

14930
来自专栏Laoqi's Linux运维专列

负载均衡、集群、高可用解决方案

92840
来自专栏云知识学习

常用HTTP状态码简介

常用HTTP状态码简介 一些常见的状态代码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务器暂时不可用

42360
来自专栏佳爷的后花媛

SVN命令解析以及问题解决(update...)

1.Repo-browser(浏览版本库) 通过“浏览版本库”可以直接查看服务器上指定目录下的所有目录结构(需要有相关权限),包括特定版本的作者,提交时间等,...

95230
来自专栏散尽浮华

Centos下MooseFS(MFS)分布式存储共享环境部署记录

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,分布式文...

83850
来自专栏云计算教程系列

如何在CentOS 7上安装MariaDB

MariaDB是一个开源数据库管理系统,通常作为流行的LEMP(Linux,Nginx,MySQL/ MariaDB,PHP / Python /Perl)运行...

35240
来自专栏CSDN技术头条

自动化模式中的MySQL

原文:MySQL on Autopilot 作者:Tim Gross 翻译:孙薇 自动化模式(Autopilot Pattern)是一种设计应用与基础架构的方式...

26750
来自专栏散尽浮华

Nginx+upstream针对后端服务器容错的运维笔记

熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一、nginx的upstr...

1.3K90

扫码关注云+社区

领取腾讯云代金券