PHP——CURL类

CURL类 Curl.php

<?php
/**
 * Created by YrPHP.
 * User: Kwin
 * QQ:284843370
 * Email:kwinwong@hotmail.com
 * GitHub:https://github.com/kwinH/YrPHP
 */
namespace YrPHP;
class Curl
{
    protected $options = array();
    protected $ch;

    function __construct()
    {
        $this->ch = curl_init();
    }

    /**
     * 设置需要获取的URL地址
     * [setUrl description]
     * @param string $url [description]
     */
    function setUrl($url = '')
    {
        $this->ch = curl_init();
        $this->options = array();
        $this->options[CURLOPT_URL] = $url;
        return $this;
    }

    /**
     * @param string $option
     * @param string $value
     * @return $this
     */
    function setOptions($option = '', $value = '')
    {
        $this->options[$option] = $value;
        return $this;
    }


    /**
     * @param bool $verify 是否验证证书 默认false不验证
     * @param string $path 验证证书时,证书路径
     * @return $this
     */
    function sslVerify($verify = false, $path = '')
    {
        if ($verify) {
            $this->options[CURLOPT_SSL_VERIFYPEER] = true;//开启后cURL将从服务端进行验证。
            $this->options[CURLOPT_CAINFO] = $path; //一个保存着1个或多个用来让服务端验证的证书的文件名
        } else {
            $this->options[CURLOPT_SSL_VERIFYPEER] = false; //禁用后cURL将终止从服务端进行验证。
            $this->options[CURLOPT_SSL_VERIFYHOST] = 0;//不检查证书
            //设为0表示不检查证书 设为1表示检查证书中是否有CN(Common name)字段  设为2表示在1的基础上校验当前的域名是否与CN匹配 默认2
        }
        return $this;
    }

    /**
     * 传递一个连接中需要的用户名和密码
     * @param array|string $userPassword 格式为:array('userName','password') 或则, "username:password"
     */
    function setUserPassword($userPassword = '')
    {
        if (is_array($userPassword)) {
            $userPassword = implode(':', $userPassword);
        }
        $this->options[CURLOPT_USERPWD] = $userPassword; //传递一个连接中需要的用户名和密码
        return $this;
    }

    /**
     * @param array $header //请求头
     */
    function setHeader($header = array())
    {
        $this->options[CURLOPT_HTTPHEADER] = $header; //一个用来设置HTTP头字段的数组
        $this->options[CURLOPT_HEADER] = 1;//启用时会将头文件的信息作为数据流输出。
        return $this;
    }


    /**
     * 启用时会发送一个常规的POST请求,默认类型为:App/x-www-form-urlencoded,就像表单提交的一样
     * @param array|string $data
     * @param string $enctype App|multipart  默认为application,文件上传请用multipart
     */
    function post($data = array(), $enctype = 'App')
    {
        if ($enctype == 'App' && is_array($data)) {
            $data = http_build_query($data);
        } elseif ($enctype == 'multipart' && is_string($data)) {
            $data = parse_str($data, $data);
        }
        $this->options[CURLOPT_POST] = true;//启用时会发送一个常规的POST请求,类型为:App/x-www-form-urlencoded
        $this->options[CURLOPT_POSTFIELDS] = $data;//如果$data是一个数组,Content-Type头将会被设置成multipart/form-data
        return $this;
    }


    /**
     * 启用时会发送一个常规的GET请求
     * @param array|string $data array('user'=>'admin','pass'=>'admin') | admin&admin
     * @return $this
     */
    function get($data = array())
    {
        if (is_array($data)) {
            $data = http_build_query($data);
        }

        if (strstr($this->options[CURLOPT_URL], '?') !== false) {
            $this->options[CURLOPT_URL] = $this->options[CURLOPT_URL] . '&' . $data;
        } else {
            $this->options[CURLOPT_URL] = $this->options[CURLOPT_URL] . '?' . $data;
        }

        return $this;
    }

    /**
     * 启用时会发送一个常规的DELETE请求
     * @param array $data
     * @return array
     */
    function delete($data = array())
    {
        curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
        return $data;
    }

    /**
     * 启用时会发送一个常规的PUT请求
     * @param array $data
     * @return array
     */
    function put($data)
    {
        curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data);
        return $data;
    }

    /**
     * 获得cookies
     * @param string $path 定义Cookie存储路径 必须使用绝对路径
     */
    function getCookie($path = '')
    {
        $this->options[CURLOPT_COOKIEJAR] = $path;//连接结束后保存cookie信息的文件
        return $this;
    }

    /**
     * 设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
     * @param string|array $cookies 定义Cookie的值
     */
    function setCookie($cookies = array())
    {
        $cookieString = '';
        if (is_array($cookies)) {
            foreach ($cookies as $name => $value) {
                $value = trim($value);
                $cookieString .= $name . '=' . $value . '; ';
            }

        } else {
            $cookieString = $cookies;
        }

        $cookieString = trim($cookieString);

        $this->options[CURLOPT_COOKIE] = $cookieString;//cookie字符串
        return $this;
    }

    /**
     * 取出cookie,一起提交给服务器
     * @param string $path 定义Cookie存储路径 必须使用绝对路径
     */
    function setCookieFile($path = '')
    {
        $this->options[CURLOPT_COOKIEFILE] = $path;//包含cookie数据的文件名
        return $this;
    }


    /**
     * 执行一个cURL会话 返回执行的结果
     * @param bool $debug 是否开启调试模式 如果为true将打印调试信息
     * @return mixed
     */
    function exec($debug = false)
    {
        $this->options[CURLOPT_RETURNTRANSFER] = true; //将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出。
        if ($debug) {
            $this->options[CURLOPT_VERBOSE] = true;//启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。
            $this->options[CURLINFO_HEADER_OUT] = true;//启用时追踪句柄的请求字符串。
            $this->options[CURLOPT_HEADER] = true;//启用时会将头文件的信息作为数据流输出。
        }

        curl_setopt_array($this->ch, $this->options);
        $re = curl_exec($this->ch);
        if ($debug) {
            $httpCode = curl_getinfo($this->ch);
            var_export($httpCode);
        }
        return $re;
    }

    function getInfo()
    {
        return curl_getinfo($this->ch);
    }

    function __destruct()
    {
        curl_close($this->ch);

    }
}

CURL类 实例:

支持连贯操作

GET请求

require 'Curl.php'
$curl = new YrPHP\Curl;

//设置需要获取的URL地址
$curl = $curl->setUrl($url . 'https://api.weixin.qq.com/sns/oauth2/access_token');

/**
* 启用时会发送一个常规的GET请求
* @param array|string $data array('user'=>'admin','pass'=>'admin') | admin&admin
* @return $this
  */
  $curl = $curl->get('appid=' . $AppID . '&secret=' . $AppSecret . '&code=' . $code . '&grant_type=authorization_code');

/**
* 执行一个cURL会话 返回执行的结果
* @param bool $debug 是否开启调试模式 如果为true将打印调试信息
* @return mixed
  */
   $curl =$curl->exec();

POST请求

require 'Curl.php'
$curl = new YrPHP\Curl;

//设置需要获取的URL地址
$curl = $curl->setUrl($url . 'https://127.0.0.1/test.php');

/**
* 启用时会发送一个常规的POST请求,默认类型为:application/x-www-form-urlencoded,就像表单提交的一样
* @param array|string $data
* @param string $enctype application|multipart  默认为application,文件上传请用multipart
  */
  $curl = $curl->post(array('name' => 'test', 'sex'=>1,'birth'=>'20101010'));

/**
* 执行一个cURL会话 返回执行的结果
* @param bool $debug 是否开启调试模式 如果为true将打印调试信息
* @return mixed
  */
   $curl =$curl->exec();

获取Cookie模拟登陆

require 'Curl.php'
$curl = new YrPHP\Curl;

$cookie_file = tempnam('./temp','cookie');

//设置需要获取的URL地址
$curl = $curl->setUrl($url . 'https://127.0.0.1/login.php');

/**
* 启用时会发送一个常规的POST请求,默认类型为:application/x-www-form-urlencoded,就像表单提交的一样
* @param array|string $data
* @param string $enctype application|multipart  默认为application,文件上传请用multipart
  */
  $curl = $curl->post(array('name' => 'admin', 'passwd'=>'123456'));

/**
* 获得cookies
* @param string $path 定义Cookie存储路径 必须使用绝对路径
  */
  $curl = $curl->getCookie($cookie_file);

/**
* 执行一个cURL会话 返回执行的结果
* @param bool $debug 是否开启调试模式 如果为true将打印调试信息
* @return mixed
  */
   $curl =$curl->exec();

$curl = $curl->setUrl($url . 'https://127.0.0.1/getUserInfo.php');

/**
* 取出cookie,一起提交给服务器
* @param string $path 定义Cookie存储路径 必须使用绝对路径
  */
  $data = $curl->setCookieFile($cookie_file)->exec();


/**
* 设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。
* @param string|array $cookies 定义Cookie的值
  */
  $curl = $curl->setCookie(array('name'=>'admin','passwd'=>'123456'));

$data = $curl->exec();
var_dump($data);

//清理cookie文件
unlink($cookie_file);

authorization认证登录

require 'Curl.php'
$curl = new YrPHP\Curl;

$headers['Referer'] = 'http://www.baidu.com';
$headers['CLIENT-IP'] = '202.103.229.40';
$headers['X-FORWARDED-FOR'] = '202.103.229.40';

//设置需要获取的URL地址
$curl = $curl->setUrl($url . 'https://127.0.0.1/login.php');

/**
* @param bool $verify 是否验证证书 默认false不验证
* @param string $path 验证证书时,证书路径
* @return $this
  */
  $curl = $curl->sslVerify(false);

/**
* 传递一个连接中需要的用户名和密码
* @param array|string $userPassword 格式为:array('userName','password') 或则, "username:password"
  */

$curl = $curl->setUserPassword(array('admin','123456'));


//setHeader(array())设置请求头
$curl->setHeader($headers)->get()->exec();
var_dump($data);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值