Skip to content

Commit c0e3807

Browse files
committed
Merge branch 'refs/heads/replace-guzzle-http' into 0.3
Conflicts: composer.lock
2 parents 256d5af + cc64be0 commit c0e3807

4 files changed

Lines changed: 95 additions & 19 deletions

File tree

Client.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@
22

33
namespace React\HttpClient;
44

5-
use Guzzle\Http\Message\Request as GuzzleRequest;
65
use React\EventLoop\LoopInterface;
76
use React\HttpClient\ConnectionManager;
8-
use React\HttpClient\Request as ClientRequest;
7+
use React\HttpClient\Request;
98
use React\HttpClient\SecureConnectionManager;
109

1110
class Client
1211
{
1312
private $loop;
14-
1513
private $connectionManager;
16-
1714
private $secureConnectionManager;
1815

1916
public function __construct(LoopInterface $loop, ConnectionManagerInterface $connectionManager, ConnectionManagerInterface $secureConnectionManager)
@@ -25,9 +22,9 @@ public function __construct(LoopInterface $loop, ConnectionManagerInterface $con
2522

2623
public function request($method, $url, array $headers = array())
2724
{
28-
$guzzleRequest = new GuzzleRequest($method, $url, $headers);
29-
$connectionManager = $this->getConnectionManagerForScheme($guzzleRequest->getScheme());
30-
return new ClientRequest($this->loop, $connectionManager, $guzzleRequest);
25+
$requestData = new RequestData($method, $url, $headers);
26+
$connectionManager = $this->getConnectionManagerForScheme($requestData->getScheme());
27+
return new Request($this->loop, $connectionManager, $requestData);
3128
}
3229

3330
public function setConnectionManager(ConnectionManagerInterface $connectionManager)

Request.php

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
namespace React\HttpClient;
44

55
use Evenement\EventEmitter;
6-
use Guzzle\Http\Message\Request as GuzzleRequest;
7-
use Guzzle\Http\Url;
86
use Guzzle\Parser\Message\MessageParser;
97
use React\EventLoop\LoopInterface;
108
use React\HttpClient\ConnectionManagerInterface;
@@ -24,20 +22,21 @@ class Request extends EventEmitter implements WritableStreamInterface
2422
const STATE_HEAD_WRITTEN = 2;
2523
const STATE_END = 3;
2624

27-
private $request;
2825
private $loop;
2926
private $connectionManager;
27+
private $requestData;
28+
3029
private $stream;
3130
private $buffer;
3231
private $responseFactory;
3332
private $response;
3433
private $state = self::STATE_INIT;
3534

36-
public function __construct(LoopInterface $loop, ConnectionManagerInterface $connectionManager, GuzzleRequest $request)
35+
public function __construct(LoopInterface $loop, ConnectionManagerInterface $connectionManager, RequestData $requestData)
3736
{
3837
$this->loop = $loop;
3938
$this->connectionManager = $connectionManager;
40-
$this->request = $request;
39+
$this->requestData = $requestData;
4140
}
4241

4342
public function isWritable()
@@ -54,23 +53,23 @@ public function writeHead()
5453
$this->state = self::STATE_WRITING_HEAD;
5554

5655
$that = $this;
57-
$request = $this->request;
56+
$requestData = $this->requestData;
5857
$streamRef = &$this->stream;
5958
$stateRef = &$this->state;
6059

6160
$this
6261
->connect()
6362
->then(
64-
function ($stream) use ($that, $request, &$streamRef, &$stateRef) {
63+
function ($stream) use ($that, $requestData, &$streamRef, &$stateRef) {
6564
$streamRef = $stream;
6665

6766
$stream->on('drain', array($that, 'handleDrain'));
6867
$stream->on('data', array($that, 'handleData'));
6968
$stream->on('end', array($that, 'handleEnd'));
7069
$stream->on('error', array($that, 'handleError'));
7170

72-
$request->setProtocolVersion('1.0');
73-
$headers = (string) $request;
71+
$requestData->setProtocolVersion('1.0');
72+
$headers = (string) $requestData;
7473

7574
$stream->write($headers);
7675

@@ -215,8 +214,8 @@ protected function parseResponse($data)
215214

216215
protected function connect()
217216
{
218-
$host = $this->request->getHost();
219-
$port = $this->request->getPort();
217+
$host = $this->requestData->getHost();
218+
$port = $this->requestData->getPort();
220219

221220
return $this->connectionManager
222221
->getConnection($host, $port);

RequestData.php

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
namespace React\HttpClient;
4+
5+
class RequestData
6+
{
7+
private $method;
8+
private $url;
9+
private $headers;
10+
11+
private $protocolVersion = '1.1';
12+
13+
public function __construct($method, $url, array $headers = array())
14+
{
15+
$this->method = $method;
16+
$this->url = $url;
17+
$this->headers = $headers;
18+
}
19+
20+
private function mergeDefaultheaders(array $headers)
21+
{
22+
$port = ($this->getDefaultPort() === $this->getPort()) ? '' : ":{$this->getPort()}";
23+
$connectionHeaders = ('1.1' === $this->protocolVersion) ? array('Connection' => 'close') : array();
24+
25+
return array_merge(
26+
array(
27+
'Host' => $this->getHost().$port,
28+
'User-Agent' => 'React/alpha',
29+
),
30+
$connectionHeaders,
31+
$headers
32+
);
33+
}
34+
35+
public function getScheme()
36+
{
37+
return parse_url($this->url, PHP_URL_SCHEME);
38+
}
39+
40+
public function getHost()
41+
{
42+
return parse_url($this->url, PHP_URL_HOST);
43+
}
44+
45+
public function getPort()
46+
{
47+
return (int) parse_url($this->url, PHP_URL_PORT) ?: $this->getDefaultPort();
48+
}
49+
50+
public function getDefaultPort()
51+
{
52+
return ('https' === $this->getScheme()) ? 443 : 80;
53+
}
54+
55+
public function getPath()
56+
{
57+
$path = parse_url($this->url, PHP_URL_PATH) ?: '/';
58+
$queryString = parse_url($this->url, PHP_URL_QUERY);
59+
60+
return $path.($queryString ? "?$queryString" : '');
61+
}
62+
63+
public function setProtocolVersion($version)
64+
{
65+
$this->protocolVersion = $version;
66+
}
67+
68+
public function __toString()
69+
{
70+
$headers = $this->mergeDefaultheaders($this->headers);
71+
72+
$data = '';
73+
$data .= "{$this->method} {$this->getPath()} HTTP/{$this->protocolVersion}\r\n";
74+
foreach ($headers as $name => $value) {
75+
$data .= "$name: $value\r\n";
76+
}
77+
$data .= "\r\n";
78+
79+
return $data;
80+
}
81+
}

composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
"license": "MIT",
66
"require": {
77
"php": ">=5.3.3",
8-
"guzzle/http": "2.8.*",
98
"guzzle/parser": "2.8.*",
109
"react/socket": "0.3.*",
1110
"react/dns": "0.3.*"

0 commit comments

Comments
 (0)