PHP——CURL类

来源:互联网 发布:java date sethour 编辑:程序博客网 时间:2024/05/01 19:53

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
原创粉丝点击