Skip to content

Commit fd4680d

Browse files
author
Martin Brecht-Precht
committed
Refactored the Response class.
1 parent 803fc39 commit fd4680d

File tree

4 files changed

+70
-172
lines changed

4 files changed

+70
-172
lines changed

src/Request/Request.php

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use BasicHttpClient\Request\Authentication\Base\AuthenticationInterface;
66
use BasicHttpClient\Request\Base\RequestInterface;
77
use BasicHttpClient\Request\Message\Base\MessageInterface;
8+
use BasicHttpClient\Request\Message\Header\Header;
89
use BasicHttpClient\Request\Transport\Base\TransportInterface;
910
use BasicHttpClient\Request\Transport\HttpsTransport;
1011
use BasicHttpClient\Request\Transport\HttpTransport;
@@ -68,6 +69,21 @@ class Request implements RequestInterface
6869
*/
6970
private $response;
7071

72+
/**
73+
* @var string
74+
*/
75+
private $effectiveStatus;
76+
77+
/**
78+
* @var string
79+
*/
80+
private $effectiveEndpoint;
81+
82+
/**
83+
* @var Header[]
84+
*/
85+
private $effectiveHeaders = array();
86+
7187
/**
7288
* Request constructor.
7389
*/
@@ -332,8 +348,9 @@ public function perform()
332348
$curlErrorCode = curl_errno($curl);
333349
$curlErrorMessage = curl_error($curl);
334350
if ($curlErrorCode === CURLE_OK) {
335-
$this->response = new Response();
351+
$this->response = new Response($this);
336352
$this->response->populateFromCurlResult($curl, $responseBody);
353+
$this->setEffectiveProperties($curl);
337354
return $this;
338355
}
339356
curl_close($curl);
@@ -367,4 +384,31 @@ protected function prePerform()
367384
}
368385
}
369386

387+
/**
388+
* @param resource $curl
389+
* @return $this
390+
*/
391+
private function setEffectiveProperties($curl)
392+
{
393+
$this->effectiveEndpoint = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
394+
// Build effective request headers
395+
$requestHeaders = preg_split(
396+
'/\r\n/',
397+
curl_getinfo($curl, CURLINFO_HEADER_OUT),
398+
null,
399+
PREG_SPLIT_NO_EMPTY
400+
);
401+
foreach ($requestHeaders as $requestHeader) {
402+
if (strpos($requestHeader, ':') !== false) {
403+
$headerName = mb_substr($requestHeader, 0, strpos($requestHeader, ':'));
404+
$headerValue = mb_substr($requestHeader, strpos($requestHeader, ':') + 1);
405+
$headerValues = explode(',', $headerValue);
406+
$this->effectiveHeaders[] = new Header($headerName, $headerValues);
407+
} else {
408+
$this->effectiveStatus = $requestHeader;
409+
}
410+
}
411+
return $this;
412+
}
413+
370414
}

src/Response/Response.php

Lines changed: 15 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33
namespace BasicHttpClient\Response;
44

5-
use BasicHttpClient\Request\Message\Header\Header as RequestHeader;
5+
use BasicHttpClient\Request\Base\RequestInterface;
66
use BasicHttpClient\Response\Header\Header;
77
use BasicHttpClient\Response\Statistics\Statistics;
8-
use BasicHttpClient\Response\Statistics\StatisticsBuilder;
98

109
/**
1110
* Class Response
@@ -15,6 +14,11 @@
1514
class Response
1615
{
1716

17+
/**
18+
* @var RequestInterface
19+
*/
20+
private $request;
21+
1822
/**
1923
* @var int
2024
*/
@@ -56,19 +60,14 @@ class Response
5660
private $statistics;
5761

5862
/**
59-
* @var string
60-
*/
61-
private $effectiveRequestStatus;
62-
63-
/**
64-
* @var string
65-
*/
66-
private $effectiveRequestEndpoint;
67-
68-
/**
69-
* @var RequestHeader[]
63+
* Response constructor.
64+
*
65+
* @param RequestInterface $request
7066
*/
71-
private $effectiveRequestHeaders = array();
67+
public function __construct(RequestInterface $request)
68+
{
69+
$this->request = $request;
70+
}
7271

7372
/**
7473
* @param resource $curl
@@ -78,12 +77,10 @@ class Response
7877
public function populateFromCurlResult($curl, $responseBody)
7978
{
8079
$this->statusCode = intval(curl_getinfo($curl, CURLINFO_HTTP_CODE));
81-
$this->effectiveRequestEndpoint = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
8280
$this->redirectCount = curl_getinfo($curl, CURLINFO_REDIRECT_COUNT);
8381
$this->redirectTime = curl_getinfo($curl, CURLINFO_REDIRECT_TIME);
8482
$this->redirectEndpoint = curl_getinfo($curl, CURLINFO_REDIRECT_URL);
8583
$this->setStatistics($curl);
86-
$this->setEffectiveRequestHeaders($curl);
8784
$this->setResponseData($responseBody);
8885
return $this;
8986
}
@@ -94,40 +91,8 @@ public function populateFromCurlResult($curl, $responseBody)
9491
*/
9592
private function setStatistics($curl)
9693
{
97-
$statisticsBuilder = new StatisticsBuilder();
98-
$this->statistics = $statisticsBuilder
99-
->setTotalTime(curl_getinfo($curl, CURLINFO_TOTAL_TIME))
100-
->setHostLookupTime(curl_getinfo($curl, CURLINFO_NAMELOOKUP_TIME))
101-
->setConnectionEstablishTime(curl_getinfo($curl, CURLINFO_CONNECT_TIME))
102-
->setPreTransferTime(curl_getinfo($curl, CURLINFO_PRETRANSFER_TIME))
103-
->setStartTransferTime(curl_getinfo($curl, CURLINFO_STARTTRANSFER_TIME))
104-
->buildStatistics();
105-
return $this;
106-
}
107-
108-
/**
109-
* @param resource $curl
110-
* @return $this
111-
*/
112-
private function setEffectiveRequestHeaders($curl)
113-
{
114-
// Build effective request headers
115-
$requestHeaders = preg_split(
116-
'/\r\n/',
117-
curl_getinfo($curl, CURLINFO_HEADER_OUT),
118-
null,
119-
PREG_SPLIT_NO_EMPTY
120-
);
121-
foreach ($requestHeaders as $requestHeader) {
122-
if (strpos($requestHeader, ':') !== false) {
123-
$headerName = mb_substr($requestHeader, 0, strpos($requestHeader, ':'));
124-
$headerValue = mb_substr($requestHeader, strpos($requestHeader, ':') + 1);
125-
$headerValues = explode(',', $headerValue);
126-
$this->effectiveRequestHeaders[] = new RequestHeader($headerName, $headerValues);
127-
} else {
128-
$this->effectiveRequestStatus = $requestHeader;
129-
}
130-
}
94+
$this->statistics = new Statistics();
95+
$this->statistics->populateFromCurlResult($curl);
13196
return $this;
13297
}
13398

src/Response/Statistics/Statistics.php

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,26 +36,17 @@ class Statistics
3636
private $startTransferTime;
3737

3838
/**
39-
* Statistics constructor.
40-
*
41-
* @param float $totalTime
42-
* @param float $hostLookupTime
43-
* @param float $connectionEstablishTime
44-
* @param float $preTransferTime
45-
* @param float $startTransferTime
39+
* @param resource $curl
40+
* @return $this
4641
*/
47-
public function __construct(
48-
$totalTime,
49-
$hostLookupTime,
50-
$connectionEstablishTime,
51-
$preTransferTime,
52-
$startTransferTime
53-
) {
54-
$this->totalTime = $totalTime;
55-
$this->hostLookupTime = $hostLookupTime;
56-
$this->connectionEstablishTime = $connectionEstablishTime;
57-
$this->preTransferTime = $preTransferTime;
58-
$this->startTransferTime = $startTransferTime;
42+
public function populateFromCurlResult($curl)
43+
{
44+
$this->totalTime = curl_getinfo($curl, CURLINFO_TOTAL_TIME);
45+
$this->hostLookupTime = curl_getinfo($curl, CURLINFO_NAMELOOKUP_TIME);
46+
$this->connectionEstablishTime = curl_getinfo($curl, CURLINFO_CONNECT_TIME);
47+
$this->preTransferTime = curl_getinfo($curl, CURLINFO_PRETRANSFER_TIME);
48+
$this->startTransferTime = curl_getinfo($curl, CURLINFO_STARTTRANSFER_TIME);
49+
return $this;
5950
}
6051

6152
/**

src/Response/Statistics/StatisticsBuilder.php

Lines changed: 0 additions & 102 deletions
This file was deleted.

0 commit comments

Comments
 (0)