Linfinity

Never say never.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

php爬虫--curl

Posted on 2019-01-17 13:41  Linfinity  阅读(235)  评论(0)    收藏  举报

1、curl介绍

curlPHP的一个扩展利用该扩展可以实现服务器之间的数据或文件传输,也就是说curl就是一个工具,用来做服务器之间数据、文件传输的工具。

此外,php的curl可以实现模拟http的各种请求,这也是php做网络爬虫的基础,也多用于接口api的调用。

 

2、开启curl扩展

(1) php.ini里面开启curl这个扩展

(2) PHP的安装路径保存到环境变量的系统变量中(环境变量之间的分隔符是英文的分号)

(3) 重启apache服务器

(4)重启计算机

 

3、使用CURL发送请求

基本流程

  1. 初始化连接句柄;
  2. 设置CURL选项;
  3. 执行并获取结果;
  4. 释放CURL连接句柄。

发送get请求

发送post请求

 

 

 4、curl的一些常用配置项

  1. CURLOPT_URL 指定请求的URL;
  2. CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
  3. CURLLOPT_HEADER设置为0表示不返回HTTP头部信息。
  4. CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER设置为false表示跳过安全证书验证,针对https协议的请求。

 

5、封装curl请求类

curl的初始化、设置选项、发出请求、关闭资源等操作封装到一个类中,便于将来重用

<?php
/*
 * 使用curl扩展发出http的get或post请求
 */
class HttpRequest
{
    //url,请求的服务器地址
    private $url = '';
    
    //is_return,是否返回结果而不是直接显示
    private $is_return = 1;
    
    public function __set($p,$v)
    {
        if(property_exists($this, $p)){
            $this->$p = $v;
        }
    }
    // 发出http请求的方法
    //参数:提交的数据,默认是空的
    public function send($data = array())
    {
        //1. 如果传递数据了,说明向服务器提交数据(post),如果没有传递数据,认为从服务器读取资源(get)
        $ch = curl_init();
        
        //2. 不管是get、post,跳过证书的验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        
        //3. 设置请求的服务器地址
        curl_setopt($ch, CURLOPT_URL, $this->url);
        
        //4. 判断是get还是post
        if(!empty($data)){
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }
        //5. 是否返回数据
        if($this->is_return===1){
            //说明返回
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        }else{
            //直接输出
            curl_exec($ch);
            curl_close($ch);
        }
    }
}
HttpRequest.class.php

 

6、curl实现文件上传

说明

PHP5.6之前的版本上传文件使用:@

Php5.6之后的版本使用new CURLFile()

 

 7、curl使用cookie登录

(1)通过CURLOPT_COOKIEJAR配置项设置,设置cookie保存到哪里

 

(2) 以后再访问服务器的时候,随身携带cookie(里面就是存储的session文件的名字),那么怎么找到这个cookie呢?

通过CURLOPT_COOKIEFILE 配置项设置,设置每次请求时携带哪个cookie文件