4 class AkHttpClient
extends AkObject
10 function get($url, $options = array())
12 return $this->customRequest($url, 'GET', $options);
15 function post($url, $options = array(), $body = '')
17 return $this->customRequest($url, 'POST', $options, $body);
20 function put($url, $options = array(), $body = '')
22 return $this->customRequest($url, 'PUT', $options, $body);
25 function delete($url, $options = array())
27 return $this->customRequest($url, 'DELETE', $options);
30 // prefix_options, query_options = split_options(options)
32 function customRequest($url, $http_verb = 'GET', $options = array(), $body = '')
34 $this->getRequestInstance($url, $http_verb, $options, $body);
35 return $this->sendRequest();
38 function urlExists($url)
40 $this->getRequestInstance($url, 'GET');
41 $this->sendRequest(false);
42 return $this->code
== 200;
45 function getRequestInstance($url, $http_verb = 'GET', $options = array(), $body = '')
47 $default_options = array(
52 $options = array_merge($default_options, $options);
54 $options['header']['user-agent'] = empty($options['header']['user-agent']) ?
55 'Akelos PHP Framework AkHttpClient (http://akelos.org)' : $options['header']['user-agent'];
57 list($user_name, $password) = $this->_extractUserNameAndPasswordFromUrl($url);
59 require_once(AK_VENDOR_DIR
.DS
.'pear'.DS
.'HTTP'.DS
.'Request.php');
61 $this->{'_setParamsFor'.ucfirst(strtolower($http_verb))}($url, $options['params']);
63 $this->HttpRequest
=& new HTTP_Request($url);
65 $user_name ?
$this->HttpRequest
->setBasicAuth($user_name, $password) : null;
67 $this->HttpRequest
->setMethod(constant('HTTP_REQUEST_METHOD_'.$http_verb));
69 $http_verb == 'PUT' && !empty($options['params']) && $this->setBody($options['params']);
71 !empty($options['params']) && $this->addParams($options['params']);
73 $this->addHeaders($options['header']);
75 return $this->HttpRequest
;
78 function addHeaders($headers)
80 foreach ($headers as $k=>$v){
81 $this->addHeader($k, $v);
85 function addHeader($name, $value)
87 $this->HttpRequest
->removeHeader($name);
88 $this->HttpRequest
->addHeader($name, $value);
91 function getResponseHeader($name)
93 return $this->HttpRequest
->getResponseHeader($name);
96 function getResponseHeaders()
98 return $this->HttpRequest
->getResponseHeader();
101 function getResponseCode()
103 return $this->HttpRequest
->getResponseCode();
106 function addParams($params = array())
109 foreach (array_keys($params) as $k){
110 $this->HttpRequest
->addPostData($k, $params[$k]);
115 function setBody($body)
117 Ak
::compat('http_build_query');
118 $this->HttpRequest
->setBody(http_build_query((array)$body));
121 function sendRequest($return_body = true)
123 $this->Response
= $this->HttpRequest
->sendRequest();
124 $this->code
= $this->HttpRequest
->getResponseCode();
125 if (PEAR
::isError($this->Response
)) {
126 $this->error
= $this->Response
->getMessage();
129 return $return_body ?
$this->HttpRequest
->getResponseBody() : true;
133 function _extractUserNameAndPasswordFromUrl(&$url)
135 return array(null,null);
138 function getParamsOnUrl($url)
140 $parts = parse_url($url);
141 if($_tmp = (empty($parts['query']) ?
false : $parts['query'])){
142 unset($parts['query']);
143 $url = $this->_httpRenderQuery($parts);
146 !empty($_tmp) && parse_str($_tmp, $result);
150 function getUrlWithParams($url, $params)
152 $parts = parse_url($url);
153 Ak
::compat('http_build_query');
154 $parts['query'] = http_build_query($params);
155 return $this->_httpRenderQuery($parts);
158 function _setParamsForGet(&$url, &$params)
160 $url_params = $this->getParamsOnUrl($url);
161 if(!count($url_params) && !empty($params)){
162 $url = $this->getUrlWithParams($url, $params);
164 $params = $url_params;
168 function _setParamsForPost(&$url, &$params)
170 empty($params) && $params = $this->getParamsOnUrl($url);
173 function _setParamsForPut(&$url, &$params)
175 empty($params) && $params = $this->getParamsOnUrl($url);
178 function _setParamsForDelete(&$url, &$params)
180 if(!$this->getParamsOnUrl($url) && !empty($params)){
181 $url = $this->getUrlWithParams($url, $params);
185 function _httpRenderQuery($parts)
187 return is_array($parts) ?
(
188 (isset($parts['scheme']) ?
$parts['scheme'].':'.((strtolower($parts['scheme']) == 'mailto') ?
'' : '//') : '').
189 (isset($parts['user']) ?
$parts['user'].(isset($parts['pass']) ?
':'.$parts['pass'] : '').'@' : '').
190 (isset($parts['host']) ?
$parts['host'] : '').
191 (isset($parts['port']) ?
':'.$parts['port'] : '').
192 (isset($parts['path'])?
((substr($parts['path'], 0, 1) == '/') ?
$parts['path'] : ('/'.$parts['path'])):'').
193 (isset($parts['query']) ?
'?'.$parts['query'] : '').
194 (isset($parts['fragment']) ?
'#'.$parts['fragment'] : '')