| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | 
							- <?php
 
- namespace Qiniu\Http;
 
- use Qiniu\Config;
 
- use Qiniu\Http\Request;
 
- use Qiniu\Http\Response;
 
- final class Client
 
- {
 
-     public static function get($url, array $headers = array())
 
-     {
 
-         $request = new Request('GET', $url, $headers);
 
-         return self::sendRequest($request);
 
-     }
 
-     public static function post($url, $body, array $headers = array())
 
-     {
 
-         $request = new Request('POST', $url, $headers, $body);
 
-         return self::sendRequest($request);
 
-     }
 
-     public static function multipartPost(
 
-         $url,
 
-         $fields,
 
-         $name,
 
-         $fileName,
 
-         $fileBody,
 
-         $mimeType = null,
 
-         array $headers = array()
 
-     ) {
 
-         $data = array();
 
-         $mimeBoundary = md5(microtime());
 
-         foreach ($fields as $key => $val) {
 
-             array_push($data, '--' . $mimeBoundary);
 
-             array_push($data, "Content-Disposition: form-data; name=\"$key\"");
 
-             array_push($data, '');
 
-             array_push($data, $val);
 
-         }
 
-         array_push($data, '--' . $mimeBoundary);
 
-         $finalMimeType = empty($mimeType) ? 'application/octet-stream' : $mimeType;
 
-         $finalFileName = self::escapeQuotes($fileName);
 
-         array_push($data, "Content-Disposition: form-data; name=\"$name\"; filename=\"$finalFileName\"");
 
-         array_push($data, "Content-Type: $finalMimeType");
 
-         array_push($data, '');
 
-         array_push($data, $fileBody);
 
-         array_push($data, '--' . $mimeBoundary . '--');
 
-         array_push($data, '');
 
-         $body = implode("\r\n", $data);
 
-         $contentType = 'multipart/form-data; boundary=' . $mimeBoundary;
 
-         $headers['Content-Type'] = $contentType;
 
-         $request = new Request('POST', $url, $headers, $body);
 
-         return self::sendRequest($request);
 
-     }
 
-     private static function userAgent()
 
-     {
 
-         $sdkInfo = "QiniuPHP/" . Config::SDK_VER;
 
-         $systemInfo = php_uname("s");
 
-         $machineInfo = php_uname("m");
 
-         $envInfo = "($systemInfo/$machineInfo)";
 
-         $phpVer = phpversion();
 
-         $ua = "$sdkInfo $envInfo PHP/$phpVer";
 
-         return $ua;
 
-     }
 
-     public static function sendRequest($request)
 
-     {
 
-         $t1 = microtime(true);
 
-         $ch = curl_init();
 
-         $options = array(
 
-             CURLOPT_USERAGENT => self::userAgent(),
 
-             CURLOPT_RETURNTRANSFER => true,
 
-             CURLOPT_SSL_VERIFYPEER => false,
 
-             CURLOPT_SSL_VERIFYHOST => false,
 
-             CURLOPT_HEADER => true,
 
-             CURLOPT_NOBODY => false,
 
-             CURLOPT_CUSTOMREQUEST => $request->method,
 
-             CURLOPT_URL => $request->url,
 
-         );
 
-         // Handle open_basedir & safe mode
 
-         if (!ini_get('safe_mode') && !ini_get('open_basedir')) {
 
-             $options[CURLOPT_FOLLOWLOCATION] = true;
 
-         }
 
-         if (!empty($request->headers)) {
 
-             $headers = array();
 
-             foreach ($request->headers as $key => $val) {
 
-                 array_push($headers, "$key: $val");
 
-             }
 
-             $options[CURLOPT_HTTPHEADER] = $headers;
 
-         }
 
-         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
 
-         if (!empty($request->body)) {
 
-             $options[CURLOPT_POSTFIELDS] = $request->body;
 
-         }
 
-         curl_setopt_array($ch, $options);
 
-         $result = curl_exec($ch);
 
-         $t2 = microtime(true);
 
-         $duration = round($t2 - $t1, 3);
 
-         $ret = curl_errno($ch);
 
-         if ($ret !== 0) {
 
-             $r = new Response(-1, $duration, array(), null, curl_error($ch));
 
-             curl_close($ch);
 
-             return $r;
 
-         }
 
-         $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 
-         $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
 
-         $headers = self::parseHeaders(substr($result, 0, $header_size));
 
-         $body = substr($result, $header_size);
 
-         curl_close($ch);
 
-         return new Response($code, $duration, $headers, $body, null);
 
-     }
 
-     private static function parseHeaders($raw)
 
-     {
 
-         $headers = array();
 
-         $headerLines = explode("\r\n", $raw);
 
-         foreach ($headerLines as $line) {
 
-             $headerLine = trim($line);
 
-             $kv = explode(':', $headerLine);
 
-             if (count($kv) > 1) {
 
-                 $kv[0] = ucwords($kv[0], '-');
 
-                 $headers[$kv[0]] = trim($kv[1]);
 
-             }
 
-         }
 
-         return $headers;
 
-     }
 
-     private static function escapeQuotes($str)
 
-     {
 
-         $find = array("\\", "\"");
 
-         $replace = array("\\\\", "\\\"");
 
-         return str_replace($find, $replace, $str);
 
-     }
 
- }
 
 
  |