summaryrefslogtreecommitdiffstats
path: root/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php')
-rw-r--r--vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php298
1 files changed, 144 insertions, 154 deletions
diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php
index ae93f3e83..3c64ce5fb 100644
--- a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php
+++ b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php
@@ -4,218 +4,197 @@ namespace PicoFeed\Client;
use LogicException;
use PicoFeed\Logging\Logger;
+use PicoFeed\Config\Config;
/**
- * Client class
+ * Client class.
*
* @author Frederic Guillot
- * @package client
*/
abstract class Client
{
/**
- * Flag that say if the resource have been modified
+ * Flag that say if the resource have been modified.
*
- * @access private
* @var bool
*/
private $is_modified = true;
/**
- * HTTP Content-Type
+ * HTTP Content-Type.
*
- * @access private
* @var string
*/
private $content_type = '';
/**
- * HTTP encoding
+ * HTTP encoding.
*
- * @access private
* @var string
*/
private $encoding = '';
/**
- * HTTP request headers
+ * HTTP request headers.
*
- * @access protected
* @var array
*/
protected $request_headers = array();
/**
- * HTTP Etag header
+ * HTTP Etag header.
*
- * @access protected
* @var string
*/
protected $etag = '';
/**
- * HTTP Last-Modified header
+ * HTTP Last-Modified header.
*
- * @access protected
* @var string
*/
protected $last_modified = '';
/**
- * Proxy hostname
+ * Proxy hostname.
*
- * @access protected
* @var string
*/
protected $proxy_hostname = '';
/**
- * Proxy port
+ * Proxy port.
*
- * @access protected
- * @var integer
+ * @var int
*/
protected $proxy_port = 3128;
/**
- * Proxy username
+ * Proxy username.
*
- * @access protected
* @var string
*/
protected $proxy_username = '';
/**
- * Proxy password
+ * Proxy password.
*
- * @access protected
* @var string
*/
protected $proxy_password = '';
/**
- * Basic auth username
+ * Basic auth username.
*
- * @access protected
* @var string
*/
protected $username = '';
/**
- * Basic auth password
+ * Basic auth password.
*
- * @access protected
* @var string
*/
protected $password = '';
/**
- * Client connection timeout
+ * Client connection timeout.
*
- * @access protected
- * @var integer
+ * @var int
*/
protected $timeout = 10;
/**
- * User-agent
+ * User-agent.
*
- * @access protected
* @var string
*/
protected $user_agent = 'PicoFeed (https://github.com/fguillot/picoFeed)';
/**
- * Real URL used (can be changed after a HTTP redirect)
+ * Real URL used (can be changed after a HTTP redirect).
*
- * @access protected
* @var string
*/
protected $url = '';
/**
- * Page/Feed content
+ * Page/Feed content.
*
- * @access protected
* @var string
*/
protected $content = '';
/**
- * Number maximum of HTTP redirections to avoid infinite loops
+ * Number maximum of HTTP redirections to avoid infinite loops.
*
- * @access protected
- * @var integer
+ * @var int
*/
protected $max_redirects = 5;
/**
- * Maximum size of the HTTP body response
+ * Maximum size of the HTTP body response.
*
- * @access protected
- * @var integer
+ * @var int
*/
protected $max_body_size = 2097152; // 2MB
/**
- * HTTP response status code
+ * HTTP response status code.
*
- * @access protected
- * @var integer
+ * @var int
*/
protected $status_code = 0;
/**
- * Enables direct passthrough to requesting client
+ * Enables direct passthrough to requesting client.
*
- * @access protected
* @var bool
*/
protected $passthrough = false;
/**
- * Do the HTTP request
+ * Do the HTTP request.
*
* @abstract
- * @access public
+ *
* @return array
*/
abstract public function doRequest();
/**
- * Get client instance: curl or stream driver
+ * Get client instance: curl or stream driver.
*
* @static
- * @access public
+ *
* @return \PicoFeed\Client\Client
*/
public static function getInstance()
{
if (function_exists('curl_init')) {
- return new Curl;
- }
- else if (ini_get('allow_url_fopen')) {
- return new Stream;
+ return new Curl();
+ } elseif (ini_get('allow_url_fopen')) {
+ return new Stream();
}
throw new LogicException('You must have "allow_url_fopen=1" or curl extension installed');
}
/**
- * Add HTTP Header to the request
+ * Add HTTP Header to the request.
*
- * @access public
* @param array $headers
*/
- public function setHeaders($headers) {
+ public function setHeaders($headers)
+ {
$this->request_headers = $headers;
}
/**
- * Perform the HTTP request
+ * Perform the HTTP request.
+ *
+ * @param string $url URL
*
- * @access public
- * @param string $url URL
* @return Client
*/
public function execute($url = '')
@@ -239,17 +218,15 @@ abstract class Client
}
/**
- * Handle not modified response
+ * Handle not modified response.
*
- * @access public
- * @param array $response Client response
+ * @param array $response Client response
*/
public function handleNotModifiedResponse(array $response)
{
if ($response['status'] == 304) {
$this->is_modified = false;
- }
- else if ($response['status'] == 200) {
+ } elseif ($response['status'] == 200) {
$this->is_modified = $this->hasBeenModified($response, $this->etag, $this->last_modified);
$this->etag = $this->getHeader($response, 'ETag');
$this->last_modified = $this->getHeader($response, 'Last-Modified');
@@ -261,10 +238,9 @@ abstract class Client
}
/**
- * Handle not found response
+ * Handle not found response.
*
- * @access public
- * @param array $response Client response
+ * @param array $response Client response
*/
public function handleNotFoundResponse(array $response)
{
@@ -274,10 +250,9 @@ abstract class Client
}
/**
- * Handle normal response
+ * Handle normal response.
*
- * @access public
- * @param array $response Client response
+ * @param array $response Client response
*/
public function handleNormalResponse(array $response)
{
@@ -289,19 +264,19 @@ abstract class Client
}
/**
- * Check if a request has been modified according to the parameters
+ * Check if a request has been modified according to the parameters.
*
- * @access public
- * @param array $response
- * @param string $etag
- * @param string $lastModified
- * @return boolean
+ * @param array $response
+ * @param string $etag
+ * @param string $lastModified
+ *
+ * @return bool
*/
private function hasBeenModified($response, $etag, $lastModified)
{
$headers = array(
'Etag' => $etag,
- 'Last-Modified' => $lastModified
+ 'Last-Modified' => $lastModified,
);
// Compare the values for each header that is present
@@ -311,7 +286,7 @@ abstract class Client
if ($response['headers'][$key] !== $value) {
return true;
}
- $presentCacheHeaderCount++;
+ ++$presentCacheHeaderCount;
}
}
@@ -325,10 +300,10 @@ abstract class Client
}
/**
- * Find content type from response headers
+ * Find content type from response headers.
+ *
+ * @param array $response Client response
*
- * @access public
- * @param array $response Client response
* @return string
*/
public function findContentType(array $response)
@@ -337,23 +312,23 @@ abstract class Client
}
/**
- * Find charset from response headers
+ * Find charset from response headers.
*
- * @access public
* @return string
*/
public function findCharset()
{
$result = explode('charset=', $this->content_type);
+
return isset($result[1]) ? $result[1] : '';
}
/**
- * Get header value from a client response
+ * Get header value from a client response.
+ *
+ * @param array $response Client response
+ * @param string $header Header name
*
- * @access public
- * @param array $response Client response
- * @param string $header Header name
* @return string
*/
public function getHeader(array $response, $header)
@@ -362,22 +337,22 @@ abstract class Client
}
/**
- * Set the Last-Modified HTTP header
+ * Set the Last-Modified HTTP header.
+ *
+ * @param string $last_modified Header value
*
- * @access public
- * @param string $last_modified Header value
* @return \PicoFeed\Client\Client
*/
public function setLastModified($last_modified)
{
$this->last_modified = $last_modified;
+
return $this;
}
/**
- * Get the value of the Last-Modified HTTP header
+ * Get the value of the Last-Modified HTTP header.
*
- * @access public
* @return string
*/
public function getLastModified()
@@ -386,22 +361,22 @@ abstract class Client
}
/**
- * Set the value of the Etag HTTP header
+ * Set the value of the Etag HTTP header.
+ *
+ * @param string $etag Etag HTTP header value
*
- * @access public
- * @param string $etag Etag HTTP header value
* @return \PicoFeed\Client\Client
*/
public function setEtag($etag)
{
$this->etag = $etag;
+
return $this;
}
/**
- * Get the Etag HTTP header value
+ * Get the Etag HTTP header value.
*
- * @access public
* @return string
*/
public function getEtag()
@@ -410,9 +385,8 @@ abstract class Client
}
/**
- * Get the final url value
+ * Get the final url value.
*
- * @access public
* @return string
*/
public function getUrl()
@@ -421,23 +395,22 @@ abstract class Client
}
/**
- * Set the url
+ * Set the url.
*
- * @access public
* @return string
* @return \PicoFeed\Client\Client
*/
public function setUrl($url)
{
$this->url = $url;
+
return $this;
}
/**
- * Get the HTTP response status code
+ * Get the HTTP response status code.
*
- * @access public
- * @return integer
+ * @return int
*/
public function getStatusCode()
{
@@ -445,9 +418,8 @@ abstract class Client
}
/**
- * Get the body of the HTTP response
+ * Get the body of the HTTP response.
*
- * @access public
* @return string
*/
public function getContent()
@@ -456,9 +428,8 @@ abstract class Client
}
/**
- * Get the content type value from HTTP headers
+ * Get the content type value from HTTP headers.
*
- * @access public
* @return string
*/
public function getContentType()
@@ -467,9 +438,8 @@ abstract class Client
}
/**
- * Get the encoding value from HTTP headers
+ * Get the encoding value from HTTP headers.
*
- * @access public
* @return string
*/
public function getEncoding()
@@ -478,9 +448,8 @@ abstract class Client
}
/**
- * Return true if the remote resource has changed
+ * Return true if the remote resource has changed.
*
- * @access public
* @return bool
*/
public function isModified()
@@ -489,9 +458,8 @@ abstract class Client
}
/**
- * return true if passthrough mode is enabled
+ * return true if passthrough mode is enabled.
*
- * @access public
* @return bool
*/
public function isPassthroughEnabled()
@@ -500,167 +468,177 @@ abstract class Client
}
/**
- * Set connection timeout
+ * Set connection timeout.
+ *
+ * @param int $timeout Connection timeout
*
- * @access public
- * @param integer $timeout Connection timeout
* @return \PicoFeed\Client\Client
*/
public function setTimeout($timeout)
{
$this->timeout = $timeout ?: $this->timeout;
+
return $this;
}
/**
- * Set a custom user agent
+ * Set a custom user agent.
+ *
+ * @param string $user_agent User Agent
*
- * @access public
- * @param string $user_agent User Agent
* @return \PicoFeed\Client\Client
*/
public function setUserAgent($user_agent)
{
$this->user_agent = $user_agent ?: $this->user_agent;
+
return $this;
}
/**
- * Set the mximum number of HTTP redirections
+ * Set the mximum number of HTTP redirections.
+ *
+ * @param int $max Maximum
*
- * @access public
- * @param integer $max Maximum
* @return \PicoFeed\Client\Client
*/
public function setMaxRedirections($max)
{
$this->max_redirects = $max ?: $this->max_redirects;
+
return $this;
}
/**
- * Set the maximum size of the HTTP body
+ * Set the maximum size of the HTTP body.
+ *
+ * @param int $max Maximum
*
- * @access public
- * @param integer $max Maximum
* @return \PicoFeed\Client\Client
*/
public function setMaxBodySize($max)
{
$this->max_body_size = $max ?: $this->max_body_size;
+
return $this;
}
/**
- * Set the proxy hostname
+ * Set the proxy hostname.
+ *
+ * @param string $hostname Proxy hostname
*
- * @access public
- * @param string $hostname Proxy hostname
* @return \PicoFeed\Client\Client
*/
public function setProxyHostname($hostname)
{
$this->proxy_hostname = $hostname ?: $this->proxy_hostname;
+
return $this;
}
/**
- * Set the proxy port
+ * Set the proxy port.
+ *
+ * @param int $port Proxy port
*
- * @access public
- * @param integer $port Proxy port
* @return \PicoFeed\Client\Client
*/
public function setProxyPort($port)
{
$this->proxy_port = $port ?: $this->proxy_port;
+
return $this;
}
/**
- * Set the proxy username
+ * Set the proxy username.
+ *
+ * @param string $username Proxy username
*
- * @access public
- * @param string $username Proxy username
* @return \PicoFeed\Client\Client
*/
public function setProxyUsername($username)
{
$this->proxy_username = $username ?: $this->proxy_username;
+
return $this;
}
/**
- * Set the proxy password
+ * Set the proxy password.
+ *
+ * @param string $password Password
*
- * @access public
- * @param string $password Password
* @return \PicoFeed\Client\Client
*/
public function setProxyPassword($password)
{
$this->proxy_password = $password ?: $this->proxy_password;
+
return $this;
}
/**
- * Set the username
+ * Set the username.
+ *
+ * @param string $username Basic Auth username
*
- * @access public
- * @param string $username Basic Auth username
* @return \PicoFeed\Client\Client
*/
public function setUsername($username)
{
$this->username = $username ?: $this->username;
+
return $this;
}
/**
- * Set the password
+ * Set the password.
+ *
+ * @param string $password Basic Auth Password
*
- * @access public
- * @param string $password Basic Auth Password
* @return \PicoFeed\Client\Client
*/
public function setPassword($password)
{
$this->password = $password ?: $this->password;
+
return $this;
}
/**
- * Enable the passthrough mode
+ * Enable the passthrough mode.
*
- * @access public
* @return \PicoFeed\Client\Client
*/
public function enablePassthroughMode()
{
$this->passthrough = true;
+
return $this;
}
/**
- * Disable the passthrough mode
+ * Disable the passthrough mode.
*
- * @access public
* @return \PicoFeed\Client\Client
*/
public function disablePassthroughMode()
{
$this->passthrough = false;
+
return $this;
}
/**
- * Set config object
+ * Set config object.
+ *
+ * @param \PicoFeed\Config\Config $config Config instance
*
- * @access public
- * @param \PicoFeed\Config\Config $config Config instance
* @return \PicoFeed\Client\Client
*/
- public function setConfig($config)
+ public function setConfig(Config $config)
{
if ($config !== null) {
$this->setTimeout($config->getClientTimeout());
@@ -675,4 +653,16 @@ abstract class Client
return $this;
}
+
+ /**
+ * Return true if the HTTP status code is a redirection
+ *
+ * @access protected
+ * @param integer $code
+ * @return boolean
+ */
+ public function isRedirection($code)
+ {
+ return $code == 301 || $code == 302 || $code == 303 || $code == 307;
+ }
}