|
|
- <?php
- namespace Telegraph;
-
- class HTTP {
-
- public static function get($url) {
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HEADER, true);
- $response = curl_exec($ch);
- $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
- return array(
- 'status' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
- 'headers' => self::_parse_headers(trim(substr($response, 0, $header_size))),
- 'body' => substr($response, $header_size)
- );
- }
-
- public static function post($url, $body, $headers=array()) {
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($ch, CURLOPT_HEADER, true);
- if (self::$_proxy) curl_setopt($ch, CURLOPT_PROXY, self::$_proxy);
- $response = curl_exec($ch);
- self::_debug($response);
- $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
- return array(
- 'status' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
- 'headers' => self::_parse_headers(trim(substr($response, 0, $header_size))),
- 'body' => substr($response, $header_size)
- );
- }
-
- public static function head($url) {
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HEADER, true);
- curl_setopt($ch, CURLOPT_NOBODY, true);
- if (self::$_proxy) curl_setopt($ch, CURLOPT_PROXY, self::$_proxy);
- $response = curl_exec($ch);
- return array(
- 'status' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
- 'headers' => self::_parse_headers(trim($response)),
- );
- }
-
- public static function parse_headers($headers) {
- $retVal = array();
- $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $headers));
- foreach($fields as $field) {
- if(preg_match('/([^:]+): (.+)/m', $field, $match)) {
- $match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./', function($m) {
- return strtoupper($m[0]);
- }, strtolower(trim($match[1])));
- // If there's already a value set for the header name being returned, turn it into an array and add the new value
- $match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./', function($m) {
- return strtoupper($m[0]);
- }, strtolower(trim($match[1])));
- if(isset($retVal[$match[1]])) {
- if(!is_array($retVal[$match[1]]))
- $retVal[$match[1]] = array($retVal[$match[1]]);
- $retVal[$match[1]][] = $match[2];
- } else {
- $retVal[$match[1]] = trim($match[2]);
- }
- }
- }
- return $retVal;
- }
- }
|