init(); * $curl_obj->setOptions(array("type"=>"post", "fields"=>$fields, "return"=>1, "onerror"=>1)); * $result = $curl_obj->getResult(); * 另外还提供了两种快速使用方法 * 1.post方式 * $result = $curl_obj->post(array('param' => 'value')); * 2.get方法 * $result = $curl_obj->get(); * */ class Curl { /** * 当前curl对话 * @var resource * @access private */ private $ch; /** * 当前发送的地址 * * @var string * @access private */ private $url; /** * 调试信息 * * @var string * @access private */ private $debug; /** * 返回是否包括header头 * * @var integer * @access private */ private $header = 0; /** * 构造函数 * @return void * @access public */ public function __construct($url) { $this->url = $url; $this->ch = @curl_init(); if (!$this->ch) { return false; } } /** * 设定返回是否包括header 头 * @param integer $header 0或1,1包括,0不包括 * @return void * @access public */ public function setHeader($header = 0) { $this->header = $header; } /** * 初始化curl对话 * @param string $url 当前发送的地址 * @return boolean * @access private */ public function init() { $this->basic(); return true; } /** * 基本选项 * * @return void * @access private */ private function basic() { curl_setopt($this->ch, CURLOPT_URL, $this->url); curl_setopt($this->ch, CURLOPT_HEADER, $this->header); } /** * * 调整用curl原生的方法,直接设置option * @param unknown_type $key * @param unknown_type $value */ public function setRawOption($key, $value) { curl_setopt($this->ch, $key, $value); } /** * 设置选项 * * @return void * @access public */ public function setOptions($options = array()) { if (is_array($options)) { foreach ($options as $key=>$value) { $this->$key = $value; } } //如果HTTP返回大于300, 是否显示错误 if (isset($this->onerror) && $this->onerror) { curl_setopt($this->ch, CURLOPT_FAILONERROR, 1); } //是否有返回值 if (isset($this->return) && $this->return == true && !isset($this->file)) { curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1); } //HTTP 认证 if (isset($this->username) && $this->username != "") { curl_setopt($this->ch, CURLOPT_USERPWD, "{$this->username}:{$this->password}"); } //SSL 检查 if (isset($this->sslVersion)) { curl_setopt($this->ch, CURLOPT_SSLVERSION, $this->sslVersion); } if (isset($this->sslCert)) { curl_setopt($this->ch, CURLOPT_SSLCERT, $this->sslCert); } if (isset($this->sslCertPasswd)) { curl_setopt($this->ch, CURLOPT_SSLCERTPASSWD, $this->sslCertPasswd); } //代理服务器 if (isset($this->proxy)) { curl_setopt($this->ch, CURLOPT_PROXY, $this->proxy); } if (isset($this->proxyUser) || isset($this->proxyPassword)) { curl_setopt($this->ch, CURLOPT_PROXYUSERPWD, "{$this->proxyUser}:{$this->proxyPassword}"); } //传输类型 if (isset($this->type)) { switch (strtolower($this->type)) { case "post": curl_setopt($this->ch, CURLOPT_POST, 1); break; case "put": curl_setopt($this->ch, CURLOPT_PUT, 1); break; } } //上传相关 if (isset($this->file)) { if (!isset($this->filesize)) { $this->filesize = filesize($this->file); } curl_setopt($this->ch, CURLOPT_INFILE, $this->file); curl_setopt($this->ch, CURLOPT_INFILESIZE, $this->filesize); curl_setopt($this->ch, CURLOPT_UPLOAD, 1); } //数据发送 if (isset($this->fields)) { if (!is_array($this->fields)) { if (!isset($this->type)) { $this->type = "post"; curl_setopt($this->ch, CURLOPT_POST, 1); } curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->fields); } else { if (!empty($this->fields)) { $p = array(); foreach ($this->fields as $key=>$value) { $p[] = $key . "=" . urlencode($value); } if (!isset($this->type)) { $this->type = "post"; curl_setopt($this->ch, CURLOPT_POST, 1); } curl_setopt($this->ch, CURLOPT_POSTFIELDS, implode("&", $p)); } } } //错误相关 if (isset($this->progress) && $this->progress == true) { curl_setopt($this->ch, CURLOPT_PROGRESS, 1); } if (isset($this->verbose) && $this->verbose == true) { curl_setopt($this->ch, CURLOPT_VERBOSE, 1); } if (isset($this->mute) && !$this->mute) { curl_setopt($this->ch, CURLOPT_MUTE, 0); } //其它相关 if (isset($this->followLocation)) { curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, $this->followLocation); } if (isset($this->timeout) && $this->timeout>0) { curl_setopt($this->ch, CURLOPT_TIMEOUT, $this->timeout); } else { curl_setopt($this->ch, CURLOPT_TIMEOUT, 20); } if (isset($this->connecttimeout) && $this->connecttimeout>0) { curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); } else { curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, 5); } if (isset($this->userAgent)) { curl_setopt($this->ch, CURLOPT_USERAGENT, $this->userAgent); } //cookie 相关 if (isset($this->cookie)) { $cookieData = ""; foreach ($this->cookie as $name => $value) { $cookieData .= urlencode($name) . "=" . urlencode($value) . ";"; } curl_setopt($this->ch, CURLOPT_COOKIE, $cookieData); } //http 头 if (isset($this->httpHeaders)) { curl_setopt($this->ch, CURLOPT_HTTPHEADER, $this->httpHeaders ); } curl_setopt($this->ch, CURLOPT_HTTPAUTH, 'CURLAUTH_DIGEST'); } /** * 设置返回结果选项,并返回结果 * @return string 返回结果 * @access public */ public function getResult() { $result = curl_exec($this->ch); return $result; } /** * 关闭当前curl对话 * @return void * @access public */ public function close() { @curl_close($this->ch); } /** * 得到对话中产生的错误描述 * @return string 错误描述 * @access public */ public function getError() { return curl_error($this->ch); } /** * 得到对话中产生的错误号 * @return integer 错误号 * @access public */ public function getErrno() { return curl_errno($this->ch); } /** * 中断执行,并输出错误信息 * @param string $msg 错误信息 * @return void * @access private */ private function halt($msg) { $message = "\n
信息:{$msg}"; $message .= "\n
错误号:".$this->getErrno(); $message .= "\n
错误:".$this->getError(); echo $message; exit; } /** * 调试信息 * * @return void * @access private */ private function debug() { $message .= "\n
错误号:".$this->getErrno(); $message .= "\n
错误:".$this->getError(); $this->debug = $message; } /** * 获得以POST方式发送的结果 * @param array/string $fields 发送的数据 * @return string 返回的结果 * @access public */ public function post($fields = array()) { $re = $this->init(); if ($re){ $this->setOptions(array("type"=>"post", "fields"=>$fields, "return"=>1, "onerror"=>1)); $result = $this->getResult(); //$this->close(); return $result; }else{ return ""; } } /** * 获得以GET方式发送的结果 * @return string 返回的结果 * @access public */ public function get() { $re = $this->init(); if ($re){ $this->setOptions(array("return"=>1, "onerror"=>1)); $result = $this->getResult(); $this->close(); return $result; }else{ return ""; } } /** * 静态调用,获得以COOKIE方式发送的结果 * @param string $url 发送的地址 * @param array/string $fields 发送的数据 * @return string 返回的结果 * @access public */ public function cookie($fields = array()) { $re = $this->init(); if ($re){ $this->setOptions(array("cookie"=>$fields, "return"=>1, "onerror"=>1)); $result = $this->getResult(); $this->close(); return $result; }else{ return ""; } } } ?>