zoukankan      html  css  js  c++  java
  • PHP封装CURL扩展

    <?php
     
    /**
    * @description: 封装CURL扩展
    * @date: 2014-07-28 16:04
    */
     
    /**
    * @编码规范
    * @class 类名首字母大写,类名为多个单词, 每个大字首字母大写 eg: class Curl , class CurlPage
    * @variable 变量名小写, 变量名为多个单词, 每个单词小写,使用下划线_分割 eg: $curl_result
    * @function 函数名与类名规则相同 eg: function SendRequest
    * @params 函数形参规则与变量名相同
    * @class-variable 成员变量,以下划线结尾,多个单词使用下划线分隔. eg: private $host_name_
    */
    /**
    * @要求
    *
    */
    class Curl{
     
    /**
    * @请求的host
    */
    private $host_;
     
    /**
    * @curl 句柄
    */
    private $ch_;
     
    /**
    * @超时限制时间
    */
    const time_=5;
    /**
    * @请求的设置
    */
    private $options_;
     
    /**
    * @保存请求头信息
    */
    private $request_header_;
     
    /**
    * @保存响应头信息
    */
    private $response_header_;
     
    /**
    * @body_ 用于保存curl请求返回的结果
    */
    private $body_;
     
    /**
    * @读取cookie
    */
    private $cookie_file_;
     
    /**
    * @写入cookie
    */
    private $cookie_jar_;
     
    /**
    * @todo proxy
    * @构造函数,初始化CURL回话
    */
    public function Start($url){
    $this->ch_ = curl_init($url);
    curl_setopt($this->ch_, CURLOPT_HEADER, 1);
    curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 1 );
    }
     
    /**
    * @返回响应头
    */
    public function ResponseHeader($url){
    if (!function_exists('http_parse_headers')) {
    function http_parse_headers ($raw_headers){
    $headers = array();
    foreach (explode("
    ", $raw_headers) as $i => $h) {
    $h = explode(':', $h, 2);
    if (isset($h[1])) {
    if(!isset($headers[$h[0]])) {
    $headers[$h[0]] = trim($h[1]);
    } else if(is_array($headers[$h[0]])) {
    $tmp = array_merge($headers[$h[0]],array(trim($h[1])));
    $headers[$h[0]] = $tmp;
    } else {
    $tmp = array_merge(array($headers[$h[0]]),array(trim($h[1])));
    $headers[$h[0]] = $tmp;
    }
    }
    }
    return $headers;
    }
    }
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    $this->body_=$this->Execx();
    $header_size = curl_getinfo($this->ch_, CURLINFO_HEADER_SIZE);
    $this->response_header_ = substr($this->body_, $start = 0, $offset = $header_size);
    $this->response_header_ = http_parse_headers($this->response_header_);
    print_r($this->response_header_);
    return $this->Close($this->body_);
    }
    /**
    * @读取cookie
    */
    public function LoadCookie($url,$cookie_file){
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_COOKIE, 1);
    curl_setopt($this->ch_, CURLOPT_COOKIEFILE , $cookie_file);
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
     
    /**
    * @写入cookie
    */
    public function SaveCookie($url){
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_COOKIE, 1);
    curl_setopt($this->ch_, CURLOPT_COOKIEFILE ,'cookie.txt');
    curl_setopt($this->ch_, CURLOPT_COOKIEJAR , 'cookie.txt');
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
     
    /**
    * @设置HEADER
    */
     
    public function SetHeader($headers = null){
    if (is_array($headers) && count($headers) > 0) {
    curl_setopt($this->ch_, CURLOPT_HTTPHEADER, $headers);
    }
    }
     
    /**
    * @GET请求
    */
    public function Get($url, array $params = array()) {
    if ($params) {
    if (strpos($url, '?')) {
    $url .= "&".http_build_query($params);
    }
    else {
    $url .= "?".http_build_query($params);
    }
    }
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    if (strpos($url, 'https') === 0) {
    curl_setopt($this->ch_, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0);
    }
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
     
    /**
    * @POST请求
    */
    public function Post($url, array $params = array()) {
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($this->ch_, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded"));
    curl_setopt($this->ch_, CURLOPT_POST, true);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    if ($params) {
    curl_setopt($this->ch_, CURLOPT_POSTFIELDS, http_build_query($params));
    }
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
     
    /**
    * @tips: google http head 方法
    */
    public function Head($url, array $params = array()) {
    $this->Start($url);
    curl_setopt($this->ch_, CURLOPT_TIMEOUT, Curl::time_);
    curl_setopt($this->ch_, CURLOPT_RETURNTRANSFER , 0);
    curl_setOpt($this->ch_,CURLOPT_NOBODY, true);
    $this->body_=$this->Execx();
    return $this->Close($this->body_);
    }
     
    /**
    * @执行CURL会话
    */
    public function Execx(){
    return curl_exec($this->ch_);
    }
     
    /**
    * @关闭CURL句柄
    */
    public function Close($body_){
    if ($body_ === false) {
    echo "CURL Error: " . curl_error($body_);
    return false;
    }
    curl_close($this->ch_);
    return $body_;
    }
    }
  • 相关阅读:
    同步/异步/阻塞/非阻塞
    java io异步
    java nio知识点总结
    使用BBED恢复数据文件头
    Codeforces Round #257 (Div. 2) B Jzzhu and Sequences
    Hibernate @Embeddable注解
    2388 Who&#39;s in the Middle(简单排序)
    CorePlot学习
    九度OJ 1179 阶乘(模拟)
    NSHashTable 和 NSMapTable学习
  • 原文地址:https://www.cnblogs.com/shanyansheng/p/5474061.html
Copyright © 2011-2022 走看看