首页 > php代码 > PHP curl封装类(包含读取/写入/读写cookie/post/代理/伪造来源IP)

PHP curl封装类(包含读取/写入/读写cookie/post/代理/伪造来源IP)

下面小编整理的这个PHP curl封装类可以实现的功能有含读取/写入/读写cookie,构造post参数,伪造来源IP,设置代理功能,下面来看看

PHP的curl能够实现许多非常强大的http操作,不过curl原生的写法有些蛋疼,于是自己封装了一个类。

本段代码部分代码来源网络,我自己添加了注释和一些小修改,目前实现的功能有:

构造post参数

读取/写入/读写cookie

伪造来源IP

设置代理

代码会不定时更新。

<?php
/**
 *File:curl.class.php
 *Createdon:2014-8-26,8:34:01
 *copyright小皓(C)2013-2099版权所有
 *www.haosblog.com
 *
 *CURL封装类,本类大部分操作均支持链式操作
 *
 *example:
 *
 *$curl=newCurl($url);
 *$curl->exec();
 *发送post数据
 *$curl->post(array('username'=>'用户名'))->exec();
 */
class Curl {
    private $ch;
    private $flag_if_have_run = false;
    private $has_cloase = true;
    public function __construct($url = '', $forgeIP = false) {
        $this->init($url, $forgeIP);
    }
    /**
     *初始化CURL。如果CURL未被关闭,则先关闭
     *
     *@paramtype$url
     *@return \Common\Library\Curl
     */
    public function init($url = '', $forgeIP = false) {
        if (!$this->has_cloase) { //如果上一次连接尚未结束,则先关闭
            $this->close();
        }
        if ($forgeIP) { //伪造IP,将IP伪造为访问者的IP
            if (Validate::isIPAddress($forgeIP)) {
                $ip = $forgeIP;
            } else {
                $ip = $_SERVER['SERVER_ADDR'];
            }
            $this->set_ip($ip);
        }
        $this->ch = curl_init($url);
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
        $this->has_cloase = false;
        return $this;
    }
    public function setUrl($url) {
        curl_setopt($this->ch, CURLOPT_URL, $url);
        return $this;
    }
    public function close() {
        if (!$this->has_close) {
            curl_close($this->ch);
            $this->has_cloase = true;
        }
    }
    public function __destruct() {
        $this->close();
    }
    /**
     *设置页面超时时间,支持链式操作
     *
     *@paramtype$timeout
     *@return \Common\Library\Curl
     */
    public function set_time_out($timeout) {
        curl_setopt($this->ch, CURLOPT_TIMEOUT, intval($timeout));
        return $this;
    }
    /**
     *伪造来源路径
     *
     *@paramtype$referer
     *@return \Common\Library\Curl
     */
    public function set_referer($referer) {
        if (!empty($referer)) {
            curl_setopt($this->ch, CURLOPT_REFERER, $referer);
        }
        return $this;
    }
    /**
     *设置cookie
     *本方法仅发送cookie信息到远端,不保存远端返回的cookie信息
     *
     *@paramtype$cookie_file cookie文件的存储路径
     *@return \Common\Library\Curl
     */
    public function load_cookie($cookie_file) {
        $this->_checkCookie($cookie_file);
        curl_setopt($this->ch, CURLOPT_COOKIEFILE, $cookie_file);
        return $this;
    }
    /**
     *设置cookie
     *发送cookie到远端,并保存远端返回的cookie
     *
     *@paramtype$cookie_file
     *@return \Common\Library\Curl
     */
    public function cookie($cookie_file) {
        $this->_checkCookie($cookie_file);
        curl_setopt($this->ch, CURLOPT_COOKIEFILE, $cookie_file);
        curl_setopt($this->ch, CURLOPT_COOKIEJAR, $cookie_file);
        return $this;
    }
    /**
     *设置cookie
     *本方法将不发送cookie信息,仅接收返回的cookie并保存
     *
     *@paramtype$cookie_file
     *@return \Common\Library\Curl
     */
    public function save_cookie($cookie_file = "") {
        //设置缓存文件,例如a.txt
        if (empty($cookie_file)) {
            $cookie_file = tempnam('./', 'cookie');
        }
        $this->_checkCookie($cookie_file);
        curl_setopt($this->ch, CURLOPT_COOKIEJAR, $cookie_file);
        return $this;
    }
    private function _checkCookie($cookie_file) {
        if (!ThinkStorage::has($cookie_file)) {
            ThinkStorage::put($cookie_file, '');
        }
    }
    /**
     *执行curl请求
     *
     *@return type
     */
    public function exec() {
        $str = curl_exec($this->ch);
        $this->flag_if_have_run = true;
        return $str;
    }
    /**
     *设置发送POST请求。没有调用过该方法默认使用GET方法提交
     *
     *@paramtype$postData post的数据,支持数组和&ldquo;xxx=1&x=2&rdquo;两种格式
     *@return \Common\Library\Curl
     */
    public function post($postData) {
        curl_setopt($this->ch, CURLOPT_POST, 1);
        //echo($postQuery);die;
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $postData);
        return $this;
    }
    /**
     *获取curl的信息
     *
     *@return type
     *@throwsException
     */
    public function get_info() {
        if ($this->flag_if_have_run == true) {
            return curl_getinfo($this->ch);
        } else {
            throw newException("<h1>需先运行(执行exec),再获取信息</h1>");
        }
    }
    /**
     *设置代理
     *
     *@paramtype$proxy
     *@return \Common\Library\Curl
     */
    public function set_proxy($proxy) {
        //设置代理,例如'68.119.83.81:27977'
        curl_setopt($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
        curl_setopt($this->ch, CURLOPT_PROXY, $proxy);
        return $this;
    }
    /**
     *设置请求的IP
     *
     *@paramtype$ip
     *@returntype
     */
    public function set_ip($ip = '') {
        if (!empty($ip)) {
            curl_setopt($this->ch, CURLOPT_HTTPHEADER, array(
                "X-FORWARDED-FOR:$ip",
                "CLIENT-IP:$ip"
            ));
        }
        return $ip;
    }
}

友情提示:关于这人php curl类其实就是把函数功能整理在一起了,然后写成一个class没有其它什么技巧了。

本文地址:http://www.phprm.com/code/73840.html

转载随意,但请附上文章地址:-)

标签:curl_setopt php curl

相关文章

发表留言