1 | <?php |
||
8 | final class Client |
||
9 | { |
||
10 | 54 | public static function get($url, array $headers = array()) |
|
15 | |||
16 | public static function delete($url, array $headers = array()) |
||
21 | |||
22 | 45 | public static function post($url, $body, array $headers = array()) |
|
27 | |||
28 | public static function multipartPost( |
||
64 | |||
65 | 99 | private static function userAgent() |
|
79 | |||
80 | 99 | public static function sendRequest($request) |
|
81 | { |
||
82 | 99 | $t1 = microtime(true); |
|
83 | 99 | $ch = curl_init(); |
|
84 | $options = array( |
||
85 | 99 | CURLOPT_USERAGENT => self::userAgent(), |
|
86 | 99 | CURLOPT_RETURNTRANSFER => true, |
|
87 | 99 | CURLOPT_SSL_VERIFYPEER => false, |
|
88 | 99 | CURLOPT_SSL_VERIFYHOST => false, |
|
89 | 99 | CURLOPT_HEADER => true, |
|
90 | 99 | CURLOPT_NOBODY => false, |
|
91 | 99 | CURLOPT_CUSTOMREQUEST => $request->method, |
|
92 | 99 | CURLOPT_URL => $request->url, |
|
93 | 66 | ); |
|
94 | |||
95 | // Handle open_basedir & safe mode |
||
96 | 99 | if (!ini_get('safe_mode') && !ini_get('open_basedir')) { |
|
97 | 99 | $options[CURLOPT_FOLLOWLOCATION] = true; |
|
98 | 66 | } |
|
99 | |||
100 | 99 | if (!empty($request->headers)) { |
|
101 | 48 | $headers = array(); |
|
102 | 48 | foreach ($request->headers as $key => $val) { |
|
103 | 48 | array_push($headers, "$key: $val"); |
|
104 | 32 | } |
|
105 | 48 | $options[CURLOPT_HTTPHEADER] = $headers; |
|
106 | 32 | } |
|
107 | 99 | curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); |
|
108 | |||
109 | 99 | if (!empty($request->body)) { |
|
110 | 24 | $options[CURLOPT_POSTFIELDS] = $request->body; |
|
111 | 16 | } |
|
112 | 99 | curl_setopt_array($ch, $options); |
|
113 | 99 | $result = curl_exec($ch); |
|
114 | 99 | $t2 = microtime(true); |
|
115 | 99 | $duration = round($t2 - $t1, 3); |
|
116 | 99 | $ret = curl_errno($ch); |
|
117 | 99 | if ($ret !== 0) { |
|
118 | $r = new Response(-1, $duration, array(), null, curl_error($ch)); |
||
119 | curl_close($ch); |
||
120 | return $r; |
||
121 | } |
||
122 | 99 | $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); |
|
123 | 99 | $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); |
|
124 | 99 | $headers = self::parseHeaders(substr($result, 0, $header_size)); |
|
125 | 99 | $body = substr($result, $header_size); |
|
126 | 99 | curl_close($ch); |
|
127 | 99 | return new Response($code, $duration, $headers, $body, null); |
|
128 | } |
||
129 | |||
130 | 99 | private static function parseHeaders($raw) |
|
144 | |||
145 | private static function escapeQuotes($str) |
||
151 | |||
152 | 99 | private static function ucwordsHyphen($str) |
|
156 | } |
||
157 |