Skip to content

Commit

Permalink
Add Response From Cache
Browse files Browse the repository at this point in the history
  • Loading branch information
Robin committed Jan 18, 2019
1 parent 64b5cbe commit 7641020
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 13 deletions.
2 changes: 1 addition & 1 deletion .php_cs.cache
@@ -1 +1 @@
{"php":"7.2.10-0ubuntu0.18.04.1","version":"2.14.0:v2.14.0#b788ea0af899cedc8114dca7db119c93b6685da2","rules":{"binary_operator_spaces":true,"blank_line_after_opening_tag":true,"blank_line_before_statement":{"statements":["return"]},"braces":{"allow_single_line_closure":true},"cast_spaces":true,"class_attributes_separation":{"elements":["method"]},"class_definition":{"single_line":true},"concat_space":{"spacing":"none"},"declare_equal_normalize":true,"function_typehint_space":true,"include":true,"increment_style":true,"lowercase_cast":true,"lowercase_static_reference":true,"magic_constant_casing":true,"magic_method_casing":true,"method_argument_space":true,"native_function_casing":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["curly_brace_block","extra","parenthesis_brace_block","square_brace_block","throw","use"]},"no_leading_import_slash":true,"no_leading_namespace_whitespace":true,"no_mixed_echo_print":{"use":"echo"},"no_multiline_whitespace_around_double_arrow":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_trailing_comma_in_list_call":true,"no_trailing_comma_in_singleline_array":true,"no_unneeded_control_parentheses":true,"no_unneeded_curly_braces":true,"no_unneeded_final_method":true,"no_unused_imports":true,"no_whitespace_before_comma_in_array":true,"no_whitespace_in_blank_line":true,"normalize_index_brace":true,"object_operator_without_whitespace":true,"php_unit_fqcn_annotation":true,"phpdoc_align":{"tags":["method","param","property","return","throws","type","var"]},"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_empty_return":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":true,"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_types":true,"phpdoc_types_order":{"null_adjustment":"always_last","sort_algorithm":"none"},"phpdoc_var_without_name":true,"protected_to_private":true,"return_type_declaration":true,"semicolon_after_instruction":true,"short_scalar_cast":true,"single_blank_line_before_namespace":true,"single_class_element_per_statement":true,"single_line_comment_style":{"comment_types":["hash"]},"single_quote":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_increment":true,"standardize_not_equals":true,"ternary_operator_spaces":true,"trailing_comma_in_multiline_array":true,"trim_array_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"yoda_style":true,"blank_line_after_namespace":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_constants":true,"lowercase_keywords":true,"no_break_comment":true,"no_closing_tag":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_import_per_statement":true,"single_line_after_imports":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"visibility_required":true,"encoding":true,"full_opening_tag":true,"array_syntax":{"syntax":"short"}},"hashes":{"tests\/HelperTest.php":715194334,"tests\/RequestTest.php":2343439842,"src\/MultipleCheckInHeaders.php":1723310735,"src\/Response.php":3043726127,"src\/Helper.php":3135230244,"src\/Request.php":1971768756,"src\/UserAgentTrait.php":1363484186,"tests\/StaticWrapperTest.php":1710346225,"src\/StaticWrapperTrait.php":191775380}}
{"php":"7.2.10-0ubuntu0.18.04.1","version":"2.14.0:v2.14.0#b788ea0af899cedc8114dca7db119c93b6685da2","rules":{"array_syntax":{"syntax":"short"}},"hashes":{"src\/MultipleCheckInHeaders.php":1723310735,"src\/Response.php":1948735710,"src\/Helper.php":3135230244,"src\/ResponseFromCache.php":1992771336,"src\/Request.php":1971768756,"src\/StaticWrapperTrait.php":191775380,"src\/UserAgentTrait.php":1363484186,"src\/ReponseInterface.php":4124945930}}
25 changes: 18 additions & 7 deletions README.md
Expand Up @@ -85,18 +85,29 @@ $r
->setUrl($url)
->getUrl()

$requested = $r->exec(); // @return PiedWeb\Curl\Requested or int corresponding to the curl error
$response = $r->exec(); // @return PiedWeb\Curl\Response or int corresponding to the curl error

$requested->getUrl(); // @return string
$requested->getContentType(); // @return string
$requested->getContent(); // @return string
$requested->getHeaders($returnArray = true); // @return array Response Header (or in a string if $returnArray is set to false)
$requested->getCookies(); // @return string
$requested->getEffectiveUrl(); // @return string
$response->getUrl(); // @return string
$response->getContentType(); // @return string
$response->getContent(); // @return string
$response->getHeaders($returnArray = true); // @return array Response Header (or in a string if $returnArray is set to false)
$response->getCookies(); // @return string
$response->getEffectiveUrl(); // @return string

$r->hasError(); // Equivalent to curl function curl_errno
$r->getError(); // .. curl_error
$r->getInfo(?string $key = null); // ... curl_getinfo or getting directly the $key value


use PiedWeb\Curl\ResponseFromCache;

$response = new ResponseFromCache( // same methods than Response except getRequest return null
string $filePathOrContent,
?string $url = null,
array $info = [],
$headers = PHP_EOL.PHP_EOL
);

```

## Change log
Expand Down
8 changes: 4 additions & 4 deletions src/Response.php
Expand Up @@ -5,14 +5,14 @@
class Response
{
/** @var Request */
private $request;
protected $request;

/** @var string */
private $headers;
protected $headers;
/** @var string * */
private $content;
protected $content;
/** @var array * */
private $info;
protected $info;

public static function get(Request $request)
{
Expand Down
74 changes: 74 additions & 0 deletions src/ResponseFromCache.php
@@ -0,0 +1,74 @@
<?php

namespace PiedWeb\Curl;

class ResponseFromCache extends Response
{
/** @var string */
protected $url;

/**
* @param string $filePath
* @param mixed $headers could be a string (the separator between headers and content or FALSE
*/
public function __construct(
string $filePathOrContent,
?string $url = null,
array $info = [],
$headers = PHP_EOL.PHP_EOL
) {
$content = file_exists($filePathOrContent) ? file_get_contents($filePathOrContent) : $filePathOrContent;

if (!$content) {
throw new \Exception($filePath.' doesn\'t exist');
}

if (false !== $headers) {
list($this->headers, $this->content) = explode($headers, $content, 2);
} else {
$this->content = $content;
}

$this->info = $info;
$this->url = $url;
}

public function getRequest()
{
return null;
}

public function getUrl()
{
return $this->url;
}

public function getEffectiveUrl()
{
return $this->url;
}

public function getStatusCode()
{
if (isset($this->headers)) {
$headers = $this->getHeaders();
list($http, $status) = explode(' ', $headers[0], 2);

return $status;
}

return $this->getInfo('http_code');
}

public function getContentType()
{
if (isset($this->headers)) {
$headers = $this->getHeaders();
if (isset($headers['content-type'])) {
return $headers['content-type'];
}
}

return $this->getInfo('content_type');
}
}
1 change: 0 additions & 1 deletion tests/HelperTest.php
Expand Up @@ -49,6 +49,5 @@ public function testHeaderParsing()

//var_dump(Helper::httpParseHeaders($headers));
//var_dump(Helper::parseHeader($headers));

}
}
16 changes: 16 additions & 0 deletions tests/RequestTest.php
Expand Up @@ -6,6 +6,8 @@

use PiedWeb\Curl\Request;
use PiedWeb\Curl\MultipleCheckInHeaders;
use PiedWeb\Curl\Response;
use PiedWeb\Curl\ResponseFromCache;

class RequestTest extends \PHPUnit\Framework\TestCase
{
Expand Down Expand Up @@ -194,4 +196,18 @@ public function testDownloadOnlyFirstBytes()

$this->assertTrue(strlen($result->getContent()) < 300);
}

public function testResponseFromCache()
{
$response = new ResponseFromCache(
'HTTP/1.1 200 OK'.PHP_EOL.PHP_EOL.'<!DOCTYPE html><html><body><p>Tests</p></body>',
'https://piedweb.com/',
['content_type' => 'text/html; charset=UTF-8']
);

$this->assertTrue($response instanceof Response);
$this->assertSame($response->getRequest(), null);
$this->assertSame($response->getMimeType(), 'text/html');
$this->assertSame($response->getContent(), '<!DOCTYPE html><html><body><p>Tests</p></body>');
}
}

0 comments on commit 7641020

Please sign in to comment.