* Get the count of redirects that have been followed, if any.
* @return int
*/
- function getRedirectCount() {
+ function getRedirectCount()
+ {
return $this->redirectCount;
}
* Gets the final target URL, after any redirects have been followed.
* @return string URL
*/
- function getUrl() {
+ function getUrl()
+ {
return $this->url;
}
+
+ /**
+ * Check if the response is OK, generally a 200 status code.
+ * @return bool
+ */
+ function isOk()
+ {
+ return ($this->getStatus() == 200);
+ }
}
/**
function __construct($url=null, $method=self::METHOD_GET, $config=array())
{
$this->config['max_redirs'] = 10;
- $this->config['follow_redirects'] = false;
+ $this->config['follow_redirects'] = true;
parent::__construct($url, $method, $config);
$this->setHeader('User-Agent', $this->userAgent());
}
/**
- * Convenience function to run a get request and return the response body.
- * Use when you don't need to get into details of the response.
+ * Convenience/back-compat instantiator
+ * @return HTTPClient
+ */
+ public static function start()
+ {
+ return new HTTPClient();
+ }
+
+ /**
+ * Convenience function to run a GET request.
*
- * @return mixed string on success, false on failure
+ * @return HTTPResponse
+ * @throws HTTP_Request2_Exception
*/
- function get()
+ public function get($url, $headers=array())
{
- $this->setMethod(self::METHOD_GET);
- return $this->doRequest();
+ return $this->doRequest($url, self::METHOD_GET, $headers);
}
/**
- * Convenience function to post form data and return the response body.
- * Use when you don't need to get into details of the response.
+ * Convenience function to run a HEAD request.
*
- * @param array associative array of form data to submit
- * @return mixed string on success, false on failure
+ * @return HTTPResponse
+ * @throws HTTP_Request2_Exception
*/
- public function post($data=array())
+ public function head($url, $headers=array())
+ {
+ return $this->doRequest($url, self::METHOD_HEAD, $headers);
+ }
+
+ /**
+ * Convenience function to POST form data.
+ *
+ * @param string $url
+ * @param array $headers optional associative array of HTTP headers
+ * @param array $data optional associative array or blob of form data to submit
+ * @return HTTPResponse
+ * @throws HTTP_Request2_Exception
+ */
+ public function post($url, $headers=array(), $data=array())
{
- $this->setMethod(self::METHOD_POST);
if ($data) {
$this->addPostParameter($data);
}
- return $this->doRequest();
+ return $this->doRequest($url, self::METHOD_POST, $headers);
}
/**
- * @return mixed string on success, false on failure
+ * @return HTTPResponse
+ * @throws HTTP_Request2_Exception
*/
- protected function doRequest()
+ protected function doRequest($url, $method, $headers)
{
- try {
- $response = $this->send();
- $code = $response->getStatus();
- if (($code < 200) || ($code >= 400)) {
- return false;
+ $this->setUrl($url);
+ $this->setMethod($method);
+ if ($headers) {
+ foreach ($headers as $header) {
+ $this->setHeader($header);
}
- return $response->getBody();
- } catch (HTTP_Request2_Exception $e) {
- $this->log(LOG_ERR, $e->getMessage());
- return false;
}
+ $response = $this->send();
+ return $response;
}
protected function log($level, $detail) {
/**
* Pulls up StatusNet's customized user-agent string, so services
* we hit can track down the responsible software.
+ *
+ * @return string
*/
function userAgent()
{
return "StatusNet/".STATUSNET_VERSION." (".STATUSNET_CODENAME.")";
}
- function send()
+ /**
+ * Actually performs the HTTP request and returns an HTTPResponse object
+ * with response body and header info.
+ *
+ * Wraps around parent send() to add logging and redirection processing.
+ *
+ * @return HTTPResponse
+ * @throw HTTP_Request2_Exception
+ */
+ public function send()
{
$maxRedirs = intval($this->config['max_redirs']);
if (empty($this->config['follow_redirects'])) {