예제 #1
0
파일: Http.php 프로젝트: sunhk25/iCMS
 /**
  * send http request
  * @param  array $rq http请求信息
  *                   url        : 请求的url地址
  *                   method     : 请求方法,'get', 'post', 'put', 'delete', 'head'
  *                   data       : 请求数据,如有设置,则method为post
  *                   header     : 需要设置的http头部
  *                   host       : 请求头部host
  *                   timeout    : 请求超时时间
  *                   cert       : ca文件路径
  *                   ssl_version: SSL版本号
  * @return string    http请求响应
  */
 public static function send($rq)
 {
     $curlHandle = curl_init();
     curl_setopt($curlHandle, CURLOPT_URL, $rq['url']);
     switch (true) {
         case isset($rq['method']) && in_array(strtolower($rq['method']), array('get', 'post', 'put', 'delete', 'head')):
             $method = strtoupper($rq['method']);
             break;
         case isset($rq['data']):
             $method = 'POST';
             break;
         default:
             $method = 'GET';
     }
     $header = isset($rq['header']) ? $rq['header'] : array();
     $header[] = 'Method:' . $method;
     $header[] = 'User-Agent:' . Conf::getUA();
     isset($rq['host']) && ($header[] = 'Host:' . $rq['host']);
     curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $header);
     curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($curlHandle, CURLOPT_CUSTOMREQUEST, $method);
     if (defined('CURLOPT_SAFE_UPLOAD')) {
         curl_setopt($curlHandle, CURLOPT_SAFE_UPLOAD, false);
     }
     isset($rq['timeout']) && curl_setopt($curlHandle, CURLOPT_TIMEOUT, $rq['timeout']);
     isset($rq['data']) && in_array($method, array('POST', 'PUT')) && curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $rq['data']);
     $ssl = substr($rq['url'], 0, 8) == "https://" ? true : false;
     if (isset($rq['cert'])) {
         curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, true);
         curl_setopt($curlHandle, CURLOPT_CAINFO, $rq['cert']);
         curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, 2);
         if (isset($rq['ssl_version'])) {
             curl_setopt($curlHandle, CURLOPT_SSLVERSION, $rq['ssl_version']);
         } else {
             curl_setopt($curlHandle, CURLOPT_SSLVERSION, 4);
         }
     } else {
         if ($ssl) {
             curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
             //true any ca
             curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, 1);
             //check only host
             if (isset($rq['ssl_version'])) {
                 curl_setopt($curlHandle, CURLOPT_SSLVERSION, $rq['ssl_version']);
             } else {
                 curl_setopt($curlHandle, CURLOPT_SSLVERSION, 4);
             }
         }
     }
     $ret = curl_exec($curlHandle);
     self::$_httpInfo = curl_getinfo($curlHandle);
     curl_close($curlHandle);
     return $ret;
 }