zoukankan      html  css  js  c++  java
  • PHP扩展功能----cURL

    一、入门三部曲

    1、cURL是什么?

    wikipedia介绍

    * 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的相关信息
    avatar

    【注】:如果开启无效,可以尝试将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、查看匹配结果

    avatar

  • 相关阅读:
    替代传统C/S和B/S技术的下一代客户/服务器编程技术
    理想的编程语言
    nginx进程模型
    Sybase 7.0 中文乱码问题
    netfilter 链接跟踪机制与NAT原理
    TraTraffic Server 进程模型
    nginx并发模型与traffic_server并发模型简单比较
    vs/nat原理分析
    ORACLE 查询表信息
    in 跟exists的区别
  • 原文地址:https://www.cnblogs.com/zqunor/p/8671898.html
Copyright © 2011-2022 走看看