30 protected function setUp()
33 $this->request = $this->client->get();
38 unset($this->request);
49 $this->assertEquals(
'GET',
$request->getMethod());
50 $this->assertEquals(
'http://www.guzzle-project.com/',
$request->getUrl());
51 $this->assertEquals(
'bar',
$request->getHeader(
'foo'));
64 $this->assertEquals(
'bar',
$request->getHeader(
'foo'));
70 $this->assertFalse(
$request->hasHeader(
'foo'));
76 'Authorization' =>
'Foo bar'
78 $this->assertNull(
$request->getUserName());
80 $this->assertEquals(
'Foo bar', (
string)
$request->getHeader(
'Authorization'));
85 $auth = base64_encode(
'michael:123');
86 $message =
"PUT /path?q=1&v=2 HTTP/1.1\r\n"
87 .
"Host: www.google.com\r\n"
88 .
"Authorization: Basic {$auth}\r\n"
89 .
"Content-Length: 4\r\n\r\nData";
92 'Authorization' =>
'Basic ' . $auth
95 $this->assertEquals($message,
$request->__toString());
103 $auth = base64_encode(
'michael:123');
104 $this->
getServer()->enqueue(
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
106 ->setClient($this->client)
107 ->setAuth(
'michael',
'123', CURLAUTH_BASIC);
110 $this->assertContains(
'Authorization: Basic ' . $auth, (
string)
$request);
115 $d = $this->request->getEventDispatcher();
116 $this->assertInstanceOf(
'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface', $d);
117 $this->assertEquals($d, $this->request->getEventDispatcher());
123 $this->assertNull(
$request->getClient());
125 $this->assertSame($this->client,
$request->getClient());
140 $response =
new Response(200, array(
141 'Content-Length' => 3
143 $this->request->setResponse($response,
true);
144 $r = $this->request->send();
146 $this->assertSame($response, $r);
147 $this->assertInstanceOf(
'Guzzle\\Http\\Message\\Response', $this->request->getResponse());
148 $this->assertSame($r, $this->request->getResponse());
149 $this->assertEquals(
'complete', $this->request->getState());
154 $this->assertNull($this->request->getResponse());
155 $response =
new Response(200, array(
'Content-Length' => 3),
'abc');
157 $this->request->setResponse($response);
158 $this->assertEquals($response, $this->request->getResponse());
162 $request->setResponse($response,
true);
164 $requestResponse =
$request->getResponse();
165 $this->assertSame($response, $requestResponse);
168 $this->assertSame($requestResponse,
$request->getResponse());
172 $request->setResponse($response,
true);
174 $requestResponse =
$request->getResponse();
175 $this->assertSame($response, $requestResponse);
176 $this->assertInstanceOf(
'Guzzle\\Http\\EntityBody', $response->getBody());
182 $this->request->setResponse(
new Response(404, array(
'Content-Length' => 3),
'abc'),
true);
183 $this->request->send();
184 $this->fail(
'Expected exception not thrown');
186 $this->assertInstanceOf(
'Guzzle\\Http\\Message\\RequestInterface', $e->
getRequest());
187 $this->assertInstanceOf(
'Guzzle\\Http\\Message\\Response', $e->
getResponse());
188 $this->assertContains(
'Client error response', $e->getMessage());
194 $this->assertInstanceOf(
'Guzzle\\Http\\QueryString', $this->request->getQuery());
195 $this->request->getQuery()->set(
'test',
'123');
196 $this->assertEquals(
'test=123', $this->request->getQuery(
true));
201 $this->assertEquals(
'GET', $this->request->getMethod());
206 $this->assertEquals(
'http', $this->request->getScheme());
207 $this->assertEquals($this->request, $this->request->setScheme(
'https'));
208 $this->assertEquals(
'https', $this->request->getScheme());
213 $this->assertEquals(
'127.0.0.1', $this->request->getHost());
214 $this->assertEquals(
'127.0.0.1:8124', (
string) $this->request->getHeader(
'Host'));
216 $this->assertSame($this->request, $this->request->setHost(
'www2.google.com'));
217 $this->assertEquals(
'www2.google.com', $this->request->getHost());
218 $this->assertEquals(
'www2.google.com:8124', (
string) $this->request->getHeader(
'Host'));
220 $this->assertSame($this->request, $this->request->setHost(
'www.test.com:8081'));
221 $this->assertEquals(
'www.test.com', $this->request->getHost());
222 $this->assertEquals(8081, $this->request->getPort());
227 $this->assertEquals(
'1.1', $this->request->getProtocolVersion());
228 $this->assertEquals($this->request, $this->request->setProtocolVersion(
'1.1'));
229 $this->assertEquals(
'1.1', $this->request->getProtocolVersion());
230 $this->assertEquals($this->request, $this->request->setProtocolVersion(
'1.0'));
231 $this->assertEquals(
'1.0', $this->request->getProtocolVersion());
236 $this->assertEquals(
'/', $this->request->getPath());
237 $this->assertEquals($this->request, $this->request->setPath(
'/index.html'));
238 $this->assertEquals(
'/index.html', $this->request->getPath());
239 $this->assertEquals($this->request, $this->request->setPath(
'index.html'));
240 $this->assertEquals(
'/index.html', $this->request->getPath());
246 $this->assertSame(
'0',
$request->getHost());
247 $this->assertSame(
'/0',
$request->getPath());
248 $this->assertSame(
'0',
$request->getQuery(
true));
251 $this->assertEquals(
'/0',
$request->getPath());
256 $this->assertEquals(8124, $this->request->getPort());
257 $this->assertEquals(
'127.0.0.1:8124', $this->request->getHeader(
'Host'));
259 $this->assertEquals($this->request, $this->request->setPort(
'8080'));
260 $this->assertEquals(
'8080', $this->request->getPort());
261 $this->assertEquals(
'127.0.0.1:8080', $this->request->getHeader(
'Host'));
263 $this->request->setPort(80);
264 $this->assertEquals(
'127.0.0.1', $this->request->getHeader(
'Host'));
270 $this->assertEquals(
null, $this->request->getUsername());
271 $this->assertEquals(
null, $this->request->getPassword());
274 $this->assertSame($this->request, $this->request->setAuth(
'michael',
'123'));
275 $this->assertEquals(
'michael', $this->request->getUsername());
276 $this->assertEquals(
'123', $this->request->getPassword());
279 $this->assertSame($this->request, $this->request->setAuth(
'michael',
''));
280 $this->assertEquals(
'michael', $this->request->getUsername());
281 $this->assertEquals(
'', $this->request->getPassword());
284 $this->request->setAuth(
false);
285 $this->assertEquals(
null, $this->request->getUsername());
286 $this->assertEquals(
null, $this->request->getPassword());
290 $request->setAuth(
'michael',
'password', CURLAUTH_DIGEST);
291 $this->assertEquals(
'michael:password',
$request->getCurlOptions()->get(CURLOPT_USERPWD));
292 $this->assertEquals(CURLAUTH_DIGEST,
$request->getCurlOptions()->get(CURLOPT_HTTPAUTH));
300 $this->request->setAuth(
'foo',
'bar',
'bam');
305 $this->assertEquals(
'/', $this->request->getResource());
306 $this->request->setPath(
'/index.html');
307 $this->assertEquals(
'/index.html', $this->request->getResource());
308 $this->request->getQuery()->add(
'v',
'1');
309 $this->assertEquals(
'/index.html?v=1', $this->request->getResource());
314 $url =
'http://www.test.com:8081/path?q=123#fragment';
316 $this->assertSame($this->request, $this->request->setUrl($url));
317 $this->assertEquals($url, $this->request->getUrl());
319 $this->assertSame($this->request, $this->request->setUrl($u));
320 $this->assertEquals($url, $this->request->getUrl());
332 $response =
new Response(200, array(
333 'Date' =>
'Sat, 16 Oct 2010 17:27:14 GMT',
335 'Cache-Control' =>
'private, max-age=0',
336 'Content-Type' =>
'text/html; charset=ISO-8859-1',
339 $this->assertSame($this->request, $this->request->setResponse($response),
'-> setResponse() must use a fluent interface');
340 $this->assertEquals(
'complete', $this->request->getState(),
'-> setResponse() must change the state of the request to complete');
341 $this->assertSame($response, $this->request->getResponse(),
'-> setResponse() must set the exact same response that was passed in to it');
346 $file = __DIR__ .
'/../../TestData/temp.out';
347 if (file_exists($file)) {
351 $this->
getServer()->enqueue(
"HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ndata");
355 $request->setResponseBody($entityBody);
357 $this->assertSame($entityBody, $response->getBody());
359 $this->assertTrue(file_exists($file));
360 $this->assertEquals(
'data', file_get_contents($file));
363 $this->assertEquals(
'data', $response->getBody(
true));
368 $this->assertNull($this->request->getCookie(
'test'));
371 $this->assertSame($this->request, $this->request->addCookie(
'test',
'abc'));
372 $this->assertEquals(
'abc', $this->request->getCookie(
'test'));
375 $this->request->setHeader(
'Cookie',
'__utma=1.638370270.1344367610.1374365610.1944450276.2; __utmz=1.1346368610.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); hl=de; PHPSESSID=ak93pqashi5uubuoq8fjv60897');
376 $this->assertEquals(
'1.638370270.1344367610.1374365610.1944450276.2', $this->request->getCookie(
'__utma'));
377 $this->assertEquals(
'1.1346368610.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)', $this->request->getCookie(
'__utmz'));
378 $this->assertEquals(
'de', $this->request->getCookie(
'hl'));
379 $this->assertEquals(
'ak93pqashi5uubuoq8fjv60897', $this->request->getCookie(
'PHPSESSID'));
382 $this->request->setHeader(
'Cookie',
null);
383 $this->assertNull($this->request->getCookie(
'test'));
384 $this->request->removeHeader(
'Cookie');
387 $this->assertSame($this->request, $this->request->addCookie(
'test',
'abc'));
388 $this->assertEquals(
'abc', $this->request->getCookie(
'test'));
389 $this->assertSame($this->request, $this->request->removeCookie(
'test'));
390 $this->assertNull($this->request->getCookie(
'test'));
393 $this->assertSame($this->request, $this->request->addCookie(
'test',
'abc'));
394 $this->request->removeHeader(
'Cookie');
395 $this->assertEquals(
'', (
string) $this->request->getHeader(
'Cookie'));
398 $this->request->addCookie(
'foo',
'bar')->addCookie(
'baz',
'boo');
399 $this->request->removeCookie(
'foo');
400 $this->assertEquals(array(
402 ), $this->request->getCookies());
404 $this->request->addCookie(
'foo',
'bar');
405 $this->assertEquals(
'baz=boo; foo=bar', (
string) $this->request->getHeader(
'Cookie'));
420 $this->request->getEventDispatcher()->addSubscriber($p);
421 $h = $this->request->getHeader(
'Host');
425 $this->assertNotSame($r->getQuery(), $this->request->getQuery());
426 $this->assertNotSame($r->getCurlOptions(), $this->request->getCurlOptions());
427 $this->assertNotSame($r->getEventDispatcher(), $this->request->getEventDispatcher());
428 $this->assertEquals($r->getHeaders(), $this->request->getHeaders());
429 $this->assertNotSame($h, $r->getHeader(
'Host'));
430 $this->assertNotSame($r->getParams(), $this->request->getParams());
431 $this->assertTrue($this->request->getEventDispatcher()->hasListeners(
'request.sent'));
436 $this->request->setUrl(
'http://michael:test@test.com/');
437 $this->assertEquals(
'michael', $this->request->getUsername());
438 $this->assertEquals(
'test', $this->request->getPassword());
445 "HTTP/1.1 200 OK\r\nContent-Length: 4\r\nExpires: Thu, 01 Dec 1994 16:00:00 GMT\r\nConnection: close\r\n\r\ndata",
446 "HTTP/1.1 200 OK\r\nContent-Length: 4\r\nExpires: Thu, 01 Dec 1994 16:00:00 GMT\r\nConnection: close\r\n\r\ndata",
447 "HTTP/1.1 404 Not Found\r\nContent-Encoding: application/xml\r\nContent-Length: 48\r\n\r\n<error><mesage>File not found</message></error>"
454 $this->assertEquals(
'data', $response->getBody(
true));
455 $this->assertEquals(200, (
int) $response->getStatusCode());
456 $this->assertEquals(
'OK', $response->getReasonPhrase());
457 $this->assertEquals(4, $response->getContentLength());
458 $this->assertEquals(
'Thu, 01 Dec 1994 16:00:00 GMT', $response->getExpires());
462 $this->assertNotSame($response, $response2);
468 $this->fail(
'Request did not receive a 404 response');
472 $requests = $this->
getServer()->getReceivedRequests(
true);
473 $messages = $this->
getServer()->getReceivedRequests(
false);
476 $userAgent = $this->client->getDefaultUserAgent();
478 $this->assertEquals(
'127.0.0.1:' . $port, $requests[0]->getHeader(
'Host'));
479 $this->assertEquals(
'127.0.0.1:' . $port, $requests[1]->getHeader(
'Host'));
480 $this->assertEquals(
'127.0.0.1:' . $port, $requests[2]->getHeader(
'Host'));
482 $this->assertEquals(
'/', $requests[0]->getPath());
483 $this->assertEquals(
'/', $requests[1]->getPath());
484 $this->assertEquals(
'/index.html', $requests[2]->getPath());
486 $parts = explode(
"\r\n", $messages[0]);
487 $this->assertEquals(
'GET / HTTP/1.1', $parts[0]);
489 $parts = explode(
"\r\n", $messages[1]);
490 $this->assertEquals(
'GET / HTTP/1.1', $parts[0]);
492 $parts = explode(
"\r\n", $messages[2]);
493 $this->assertEquals(
'GET /index.html HTTP/1.1', $parts[0]);
499 $this->
getServer()->enqueue(
"HTTP/1.1 404 Not found\r\nContent-Length: 0\r\n\r\n");
504 $this->fail(
'Request did not receive a 404 response');
506 $this->assertContains(
'Client error response', $e->getMessage());
507 $this->assertContains(
'[status code] 404', $e->getMessage());
508 $this->assertContains(
'[reason phrase] Not found', $e->getMessage());
516 $request->setResponse($response,
true);
519 $request->getEventDispatcher()->addListener(
'request.error',
function($event) use (&$out, $that) {
520 $out .= $event[
'request'] .
"\n" . $event[
'response'] .
"\n";
521 $event->stopPropagation();
524 $this->assertContains((
string)
$request, $out);
525 $this->assertContains((
string)
$request->getResponse(), $out);
526 $this->assertSame($response,
$request->getResponse());
533 "HTTP/1.1 404 NOT FOUND\r\n" .
534 "Content-Length: 0\r\n" .
536 "HTTP/1.1 200 OK\r\n" .
537 "Content-Length: 0\r\n" .
544 $request->getEventDispatcher()->addListener(
'request.error',
function($event) use (&$newResponse) {
545 if ($event[
'response']->getStatusCode() == 404) {
546 $newRequest = clone $event[
'request'];
547 $newResponse = $newRequest->send();
549 $event[
'response'] = $newResponse;
551 $event->stopPropagation();
557 $this->assertEquals(200,
$request->getResponse()->getStatusCode());
558 $this->assertSame($newResponse,
$request->getResponse());
559 $this->assertEquals(2, count($this->
getServer()->getReceivedRequests()));
565 $this->assertInstanceOf(
'Guzzle\Http\Url',
$request->getUrl(
true));
566 $this->assertEquals(
'http://www.example.com/foo?abc=d',
$request->getUrl());
567 $this->assertEquals(
'http://www.example.com/foo?abc=d', (
string)
$request->getUrl(
true));
574 "HTTP/1.1 303 SEE OTHER\r\nContent-Length: 0\r\n\r\n",
575 "HTTP/1.1 301 Foo\r\nLocation: /foo\r\nContent-Length: 0\r\n\r\n"
578 $this->assertEquals(303,
$request->send()->getStatusCode());
580 $this->assertEquals(301,
$request->send()->getStatusCode());
586 $this->
getServer()->enqueue(
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
587 $request = $this->client->createRequest(
'PROPFIND', $this->
getServer()->getUrl(), array(
588 'Content-Type' =>
'text/plain'
591 $requests = $this->
getServer()->getReceivedRequests(
true);
592 $this->assertEquals(
'PROPFIND', $requests[0]->getMethod());
593 $this->assertEquals(3, (
string) $requests[0]->getHeader(
'Content-Length'));
594 $this->assertEquals(
'foo', (
string) $requests[0]->getBody());
603 $this->
getServer()->enqueue(
"HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest");
604 $this->client->get(
'/')->setResponseBody(
'/wefwefefefefwewefwe/wefwefwefefwe/wefwefewfw.txt')->send();
610 $this->
getServer()->enqueue(
"HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\ntest");
611 $name = sys_get_temp_dir() .
'/foo.txt';
612 $this->client->get(
'/')->setResponseBody($name)->send();
613 $this->assertEquals(
'test', file_get_contents($name));
623 $this->assertEquals(
'foo', (
string) $en);
630 $this->assertEquals(
'https://foo.com', (
string)
$request->getUrl());
631 $this->assertEquals(
'foo.com',
$request->getHost());
633 $this->assertEquals(
'http://foo.com', (
string)
$request->getUrl());
634 $this->assertEquals(
'foo.com',
$request->getHost());
636 $this->assertEquals(
'http://foo.com', (
string)
$request->getUrl());
637 $this->assertEquals(
'foo.com',
$request->getHost());