File tree Expand file tree Collapse file tree 2 files changed +25
-10
lines changed
Expand file tree Collapse file tree 2 files changed +25
-10
lines changed Original file line number Diff line number Diff line change @@ -77,7 +77,7 @@ private function parseRequest($data)
7777 // check this is a valid authority-form request-target (host:port)
7878 if (isset ($ uri ['scheme ' ], $ uri ['host ' ], $ uri ['port ' ]) && count ($ uri ) === 3 ) {
7979 $ originalTarget = $ parts [1 ];
80- $ parts [1 ] = '/ ' ;
80+ $ parts [1 ] = 'http:// ' . $ parts [ 1 ] . ' / ' ;
8181 $ headers = implode (' ' , $ parts );
8282 } else {
8383 throw new \InvalidArgumentException ('CONNECT method MUST use authority-form request target ' );
@@ -135,16 +135,8 @@ private function parseRequest($data)
135135
136136 // re-apply actual request target from above
137137 if ($ originalTarget !== null ) {
138- $ uri = $ request ->getUri ()->withPath ('' );
139-
140- // re-apply host and port from request-target if given
141- $ parts = parse_url ('tcp:// ' . $ originalTarget );
142- if (isset ($ parts ['host ' ], $ parts ['port ' ])) {
143- $ uri = $ uri ->withHost ($ parts ['host ' ])->withPort ($ parts ['port ' ]);
144- }
145-
146138 $ request = $ request ->withUri (
147- $ uri ,
139+ $ request -> getUri ()-> withPath ( '' ) ,
148140 true
149141 )->withRequestTarget ($ originalTarget );
150142 }
Original file line number Diff line number Diff line change @@ -225,6 +225,29 @@ public function testRequestConnectAuthorityForm()
225225 $ this ->assertSame ('example.com:443 ' , $ requestAssertion ->getHeaderLine ('Host ' ));
226226 }
227227
228+ public function testRequestConnectWithoutHostWillBeAdded ()
229+ {
230+ $ requestAssertion = null ;
231+ $ server = new Server (function (ServerRequestInterface $ request ) use (&$ requestAssertion ) {
232+ $ requestAssertion = $ request ;
233+ return new Response ();
234+ });
235+
236+ $ server ->listen ($ this ->socket );
237+ $ this ->socket ->emit ('connection ' , array ($ this ->connection ));
238+
239+ $ data = "CONNECT example.com:443 HTTP/1.1 \r\n\r\n" ;
240+ $ this ->connection ->emit ('data ' , array ($ data ));
241+
242+ $ this ->assertInstanceOf ('RingCentral\Psr7\Request ' , $ requestAssertion );
243+ $ this ->assertSame ('CONNECT ' , $ requestAssertion ->getMethod ());
244+ $ this ->assertSame ('example.com:443 ' , $ requestAssertion ->getRequestTarget ());
245+ $ this ->assertSame ('' , $ requestAssertion ->getUri ()->getPath ());
246+ $ this ->assertSame ('http://example.com:443 ' , (string )$ requestAssertion ->getUri ());
247+ $ this ->assertSame (443 , $ requestAssertion ->getUri ()->getPort ());
248+ $ this ->assertSame ('example.com:443 ' , $ requestAssertion ->getHeaderLine ('Host ' ));
249+ }
250+
228251 public function testRequestConnectAuthorityFormWithDefaultPortWillBeIgnored ()
229252 {
230253 $ requestAssertion = null ;
You can’t perform that action at this time.
0 commit comments