Curl客户端

1.cURL介绍

  cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。

2.基本结构

  在学习更为复杂的功能之前,先来看一下在PHP中建立cURL请求的基本步骤:

  (1)初始化

     curl_init()

  (2)设置变量

    curl_setopt() 。最为重要,一切玄妙均在此。有一长串cURL参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。

  (3)执行并获取结果

    curl_exec()

  (4)释放cURL句柄

    curl_close()

3.cURL实现Get和Post

示例代码:

<?php
/**
 * Curl客户端
 * 
 * @author WillMao
 */
class CurlHelper{
       
    public $ch;
    public $url=null;
    
    public function __construct(){
        $this->ch = curl_init();
    }

    public function setUrl($url){
        if(!preg_match('!^w+://!i', $url)) {
            $url = 'http://'.$url;
        }
        $this->url = $url;
    }
    
    public function setOptions($key,$value){
        curl_setopt($this->ch, $key, $value);
    }
    
    public function setDefault($timeout=30,$header=false){
        empty($timeout)?$this->setOptions(CURLOPT_TIMEOUT,30):$this->setOptions(CURLOPT_TIMEOUT,$timeout);
        $this->setOptions(CURLOPT_HEADER,$header);
        $this->setOptions(CURLOPT_RETURNTRANSFER,true);
        $this->setOptions(CURLOPT_FAILONERROR,true);
    }
    /**
     * Curl请求数据
     * @param mixed $url url地址
     * @param mixed $postdata get请求直接留空 post使用数组 array('name'=>'will','age'=>'24')
     * @return mixed url的内容
     */
    public function request($url,$postdata=false){
        $this->setUrl($url);
        
        if(!$this->url){
            return false;
        }else{
            $this->setOptions(CURLOPT_URL,$this->url);
        }
        $this->setDefault();
        if($postdata){
            if(is_array($postdata)){
                $this->setOptions(CURLOPT_POST,1);
                $this->setOption(CURLOPT_POSTFIELDS, $postdata);
            }else{
                throw new Exception('post的数据必须是一个数组形式');
            }
        }
        $return=curl_exec($this->ch);
        if(!$return){
            return false;
        }else{
            return $return;
        }
    }
}
原文地址:https://www.cnblogs.com/520fyl/p/5482509.html