| 
								
							 | 
							
								<?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);
							 | 
						
						
						
							| 
								
							 | 
							
								    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
							 | 
						
						
						
							| 
								
							 | 
							
								    $response = curl_exec($ch);
							 | 
						
						
						
							| 
								
							 | 
							
								    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
							 | 
						
						
						
							| 
								
							 | 
							
								    return array(
							 | 
						
						
						
							| 
								
							 | 
							
								      'code' => 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_FOLLOWLOCATION, true);
							 | 
						
						
						
							| 
								
							 | 
							
								    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(
							 | 
						
						
						
							| 
								
							 | 
							
								      'code' => 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);
							 | 
						
						
						
							| 
								
							 | 
							
								    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
							 | 
						
						
						
							| 
								
							 | 
							
								    if (self::$_proxy) curl_setopt($ch, CURLOPT_PROXY, self::$_proxy);
							 | 
						
						
						
							| 
								
							 | 
							
								    $response = curl_exec($ch);
							 | 
						
						
						
							| 
								
							 | 
							
								    return array(
							 | 
						
						
						
							| 
								
							 | 
							
								      'code' => 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;
							 | 
						
						
						
							| 
								
							 | 
							
								  }
							 | 
						
						
						
							| 
								
							 | 
							
								}
							 |