PHP扩展功能----cURL
一、入门三部曲
1、cURL是什么?
* cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
* cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。
* libcurl支持的平台有Solaris、NetBSD、FreeBSD、OpenBSD、Darwin、HP-UX、IRIX、AIX、Tru64、Linux、UnixWare、HURD、Windows、Symbian、Amiga、OS/2、BeOS、Mac OS X、Ultrix、QNX、BlackBerry Tablet OS、OpenVMS、RISC OS、Novell NetWare、DOS等。
简而言之:cURL是下载工具、传输工具。利用url的语法规则传输文件、数据的命令行工具和库。
2、为什么要用cURL?
通常是通过表单(html)提交数据到php文件从而实现数据的交互,但是不能实现php文件之间的数据和文件传输,
所以,cURL的应用场景主要是php文件之间的数据和文件传输。
3、在PHP中怎么用cURL?
(1)php.ini中开启curl扩展
extension=php_curl.dll
然后重启apache
(2)在phpinfo()的输出信息中查看是否有curl的相关信息

【注】:如果开启无效,可以尝试将php安装目录下的libeay32.dll 、ssleay32.dll拷贝到windows 或 windows/system32目录下
二、cURL在PHP中的应用
必备函数:
(1)curl_init() --- 初始化 cURL 会话
(2)curl_setopt() --- 设置 cURL 传输选项
参数:
post方式:
- CURLOPT_POST
- CURLOPT_POSTFIELDS
get方式:
- CURLOPT_RETURNTRANSFER
- CURLOPT_SSL_VERIFYHOST
安全验证:
- CURLOPT_SSL_VERIFYPEER
- CURLOPT_SSL_VERIFYPEER
(3)curl_exec(); --- 执行 cURL 会话
(4)curl_close() --- 关闭 cURL 会话
1、模拟get请求
(1)默认是直接显示返回的数据,对于html数据,则直接以网页的形式显示。
//1、初始化curl
$curl = curl_init();
//2、告诉curl,请求的地址
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/index.php');
//3、发送请求
curl_exec($curl);
//4、关闭资源
curl_close($curl);
(2)设置只获取数据,不直接显示
//1、初始化curl
$curl = curl_init();
//2、告诉curl,请求的地址
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/index.php');
//将请求的数据返回,而不是直接输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//3、发送请求
$res = curl_exec($curl);
var_dump($res);
//4、关闭资源
curl_close($curl);
2、模拟post请求
1、初始化curl
$curl = curl_init();
//2、设置请求的地址
curl_setopt($curl, CURLOPT_URL, 'http://localhost/curl_post.php');
// (1)设置请求的方式为post
curl_setopt($curl, CURLOPT_POST, true);
// (2)设置post提交的数据
$data = [
'username' => 'zqunor',
'password' => 'zqunor123'
];
// (3)提交数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//3、发送请求
curl_exec($curl);
//4、关闭资源
curl_close($curl);
3、封装成类,兼容post和get方式
class HttpRequest
{
private static $isShow = false;
public function __set($attr, $value)
{
$this->$attr = $value;
}
public static function send($url,$data=null)
{
$curl = curl_init();
// 设置请求的url地址
curl_setopt($curl, CURLOPT_URL, $url);
// 直接跳过安全证书的验证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// 根据$data判断是post还是get方式
if (!empty($data)) {
// 如果$data非空,则为post方式
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
// 反之为get方式
if (!self::$isShow) {
// 不直接显示数据,而是以返回值的形式
curl_setopt($curl, CURLOPT_RETURNTRANSFER, $url);
}
$res = curl_exec($curl);
return $res;
curl_close($curl);
}
}
4、实例化进行数据获取
// 调用封装的类,请求知乎php话题下的数据
$res = HttpRequest::send('https://www.zhihu.com/search?type=content&q=php');
// 查看需要获取的数据的html样式
// <a target="_blank" href="/question/26498147/answer/33029411" data-reactid="218"><span class="Highlight" data-reactid="219">「<em>PHP</em> 是最好的语言」这个梗是怎么来的?</span></a>
// <a target="_blank" href="/question/41913568/answer/95778872" data-reactid="366"><span class="Highlight" data-reactid="367">如何看待天猫彻底抛弃<em>PHP</em>?</span></a>
// <a target="_blank" href="/question/25038841/answer/44396770" data-reactid="292"><span class="Highlight" data-reactid="293"><em>PHP</em>、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?</span></a>
// 根据样式设置正则匹配模式,筛选所需数据
$reg = '/<a[^>]*><span class="Highlight"[^>]*>(.+?)<\/span><\/a>/';
preg_match_all($reg, $res, $match);
var_dump($match);
5、查看匹配结果

PHP扩展功能----cURL的更多相关文章
- curl命令使用
curl命令可以用来构造http请求.参数有很多,常用的参数如下: 通用语法:curl [option] [URL...]在处理URL时其支持类型于SHELL的名称扩展功能,如http://www.j ...
- PHP模拟发送POST请求之五curl基本使用和多线程优化
今天来介绍PHP模拟发送POST请求的重型武器——cURL函数库的使用和其多线程的优化方法. 说起cURL函数,可谓是老生常谈,但网上许多资料都在关键部分语焉不详,列出一大堆手册上的东西,搞得我入门时 ...
- curl命令使用(转)
转自:http://www.cnblogs.com/sunada2005/p/3829772.html curl命令可以用来构造http请求.参数有很多,常用的参数如下: 通用语法:curl [opt ...
- 使用curl获取网站的http的状态码
发布:thebaby 来源:net [大 中 小] 本文分享一例shell脚本,一个使用curl命令获取网站的httpd状态码的例子,有需要的朋友参考下.本文转自:http://www.j ...
- 一个简单的增强型PHP curl函数
啥都不说,先上代码 <?PHP /* * @author 小伍 */ echo "<pre>"; $proxy = array('url'=>'http:/ ...
- windows下面,PHP如何启动一些扩展功能
我今天在试这个时,发现php有些默认设置,是需要人为介入修改的. 比如,当我们在安装一个软件,而这个软件需要启用php一些扩展功能. 那么,按一般套路,将php.ini文件里的相关行的注释去掉即可. ...
- 在PowerShell中使用curl(Invoke-WebRequest)
前言 习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool.然而命令行真的会比界面快的多,如果你是一个码农. situation:接到需求分析bug,需要访 ...
- php中实现的一个curl批处理的实例
curl是利用URL语法在命令行方式下工作的开源文件传输工具 本文在php中实现了的一个curl批处理的实例. 代码如下: header("Content-Type:text/html;ch ...
- PHP curl 函数
转载http://sunking.sinaapp.com/archives/111 最近使用curl的时候,发现了一个比较好用的函数,当然是初级者适用的一个函数,就是curl_getinfo(), 在 ...
随机推荐
- MySQL常见常用的SQL优化
应尽量避免在where中使用!=或<>操作符.否则会进行全表查询 对于查询,避免全盘扫描,考虑在where或order by涉及到的列上建立索引 避免在where中进行null值判断,否则 ...
- Delegate背后的秘密
表面上看来使用delegate是一件很简单的事. 用delegate关键字定义,使用老套的new创建一个instance ,使用熟悉的方法调用写法调用,只不过不在是方法名,而是委托名. 但是在这背后C ...
- Redis ,Memcached ,Mongodb 对比
memcached: 1.适合做内存缓存,对可靠性没有要求,不支持持久化:速度快.并发高.2.支持的数据结构单一,只支持Key-value,3.value最大支持1M3.在传统tomcat 部署war ...
- Github+hexo+next搭建教程
今天参考的是大神的教程,学了一个新东西,但是可能由于原教程中运用的npm包与我当前使用的npm包版本不同的原因,有出过多处运行错误,但都在此教程中解决了; 总结了下命令: npm install he ...
- 再谈javascript函数节流
之前写过但是不记得在哪了,今天同事要一个滑到页面底部加载更多内容的效果,又想起了这玩意儿,确实挺实用和常用的,谨此记之. 函数节流从字面上的意思就是节约函数的执行次数,其实现的主要思想是通过定时器阻断 ...
- JS实现小图放大轮播效果
JS实现小图放大轮播页面效果入下(图片为优行商旅页面照片): 实现效果:图片自动轮播,鼠标移入停止,移出继续轮播点击下方小图可以实现切换 步骤一:建立HTML布局,具体如下: <body> ...
- 记录LNMP环境彻底删除绑定域名及网站文件夹/文件的过程
lnmp vhost del #删除绑定的域名 chattr -i /home/wwwroot/域名文件夹/.user.ini #解除文件安全限制 rm -rf /home/wwwroot/域名文件夹 ...
- Node.js 的安装
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 的运行环境,简单的说就是运行在服务端的 JavaScript.所以学起来还是比较容易接受的. Node.js 使用事件驱动 ...
- 001profile条件化创建bean
01.类级别条件创建 @Configuration @Profile("dev") public class Aclass{}---->影响整个类,包括类的注解.开发环境,类 ...
- Linux / mysql: is it safe to copy mysql db files with cp command from one db to another?
Copying is very simple for MyISAM and completely 100% risky (near suicidal) with InnoDB. From your q ...