24 private function getLogPlugin()
27 function($message, $priority, $extras =
null) {
28 echo $message .
' ' . $priority .
' ' . implode(
' - ', (array) $extras) .
"\n";
35 $client =
new Client(
'http://www.google.com/');
36 $this->assertEquals(
'http://www.google.com/', $client->getBaseUrl());
37 $this->assertSame($client, $client->setConfig(array(
40 $this->assertEquals(array(
'test' =>
'123'), $client->getConfig()->getAll());
41 $this->assertEquals(
'123', $client->getConfig(
'test'));
42 $this->assertSame($client, $client->setBaseUrl(
'http://www.test.com/{test}'));
43 $this->assertEquals(
'http://www.test.com/123', $client->getBaseUrl());
44 $this->assertEquals(
'http://www.test.com/{test}', $client->getBaseUrl(
false));
47 $client->setConfig(
false);
48 }
catch (\InvalidArgumentException $e) {
59 $client =
new Client(
'http://www.test.com/', array(
62 $this->assertEquals(
'123', $client->getConfig(
'data'));
67 $client =
new Client(
'http://www.google.com/');
71 'base_url' =>
'http://www.google.com/'
73 $this->assertEquals(
'v1', $client->getConfig(
'api'));
78 $client =
new Client(
'http://www.google.com/');
79 $client->setConfig(array(
'api' =>
'v1',
'key' =>
'value',
'foo' =>
'bar'));
80 $ref = new \ReflectionMethod($client,
'expandTemplate');
81 $ref->setAccessible(
true);
82 $this->assertEquals(
'Testing...api/v1/key/value', $ref->invoke($client,
'Testing...api/{api}/key/{key}'));
88 $this->
getServer()->enqueue(
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
91 $logPlugin = $this->getLogPlugin();
92 $client->getEventDispatcher()->addSubscriber($logPlugin);
96 $request = $client->createRequest();
97 $this->assertTrue($this->
hasSubscriber($request, $logPlugin));
102 $client =
new Client(
'http://www.{foo}.{data}/', array(
106 $this->assertEquals(
'http://www.bar.123/', $client->getBaseUrl());
107 $client->setBaseUrl(
'http://www.google.com/');
108 $this->assertEquals(
'http://www.google.com/', $client->getBaseUrl());
113 $client =
new Client(
'http://www.test.com/', array(
116 'curl.options' => array(
117 'CURLOPT_HTTPAUTH' =>
'CURLAUTH_DIGEST',
119 'blacklist' =>
'abc',
124 $request = $client->createRequest();
125 $options = $request->getCurlOptions();
126 $this->assertEquals(CURLAUTH_DIGEST, $options->get(CURLOPT_HTTPAUTH));
127 $this->assertEquals(
'foo', $options->get(
'abc'));
128 $this->assertEquals(
'abc', $options->get(
'blacklist'));
133 $client =
new Client(
'https://www.secure.com/');
136 $request = $client->createRequest();
137 $options = $request->getCurlOptions();
138 $this->assertTrue($options->get(CURLOPT_SSL_VERIFYPEER));
141 $client =
new Client(
'https://www.secure.com/');
142 $client->setSslVerification(__DIR__);
143 $request = $client->createRequest();
144 $options = $request->getCurlOptions();
145 $this->assertSame(__DIR__, $options->get(CURLOPT_CAPATH));
151 $client =
new Client(
'https://www.secure.com/', array(
'ssl.certificate_authority' =>
'system'));
152 $this->assertNull($client->getConfig(
'curl.options'));
154 $client =
new Client(
'https://www.secure.com/', array(
'ssl.certificate_authority' =>
false));
155 $options = $client->getConfig(
'curl.options');
156 $this->assertArrayNotHasKey(CURLOPT_CAINFO, $options);
157 $this->assertSame(
false, $options[CURLOPT_SSL_VERIFYPEER]);
158 $this->assertSame(0, $options[CURLOPT_SSL_VERIFYHOST]);
164 $client =
new Client(
'https://www.secure.com/', array(
168 $client->setSslVerification(
false);
169 $request = $client->createRequest();
170 $options = $request->getCurlOptions();
171 $this->assertFalse($options->get(CURLOPT_SSL_VERIFYPEER));
172 $this->assertNull($options->get(CURLOPT_CAINFO));
180 $client =
new Client(
'https://www.secure.com/');
181 $client->setSslVerification(
'/path/to/missing/file');
187 $client =
new Client(
'https://www.secure.com/', array(
191 $client->setSslVerification(__FILE__);
192 $request = $client->createRequest();
193 $options = $request->getCurlOptions();
194 $this->assertSame(__FILE__, $options->get(CURLOPT_CAINFO));
203 $client =
new Client(
'https://www.secure.com/', array(
206 $client->setSslVerification(__FILE__,
true,
true);
215 $client =
new Client(
'https://www.secure.com/', array(
218 $client->setSslVerification(__FILE__,
'yes');
224 $client =
new Client(
'http://www.example.com', array(
226 'request.params' => array(
231 $request = $client->createRequest();
232 $this->assertEquals(
'bar', $request->getParams()->get(
'foo'));
233 $this->assertEquals(
'jar', $request->getParams()->get(
'baz'));
239 $u = $this->
getServer()->getUrl() .
'base/';
240 $u2 = $this->
getServer()->getUrl() .
'base?z=1';
243 array($u,
'relative/path/to/resource', $u .
'relative/path/to/resource'),
244 array($u,
'relative/path/to/resource?a=b&c=d', $u .
'relative/path/to/resource?a=b&c=d'),
245 array($u,
'/absolute/path/to/resource', $this->
getServer()->getUrl() .
'absolute/path/to/resource'),
246 array($u,
'/absolute/path/to/resource?a=b&c=d', $this->
getServer()->getUrl() .
'absolute/path/to/resource?a=b&c=d'),
247 array($u2,
'/absolute/path/to/resource?a=b&c=d', $this->
getServer()->getUrl() .
'absolute/path/to/resource?a=b&c=d&z=1'),
248 array($u2,
'relative/path/to/resource', $this->
getServer()->getUrl() .
'base/relative/path/to/resource?z=1'),
249 array($u2,
'relative/path/to/resource?another=query', $this->
getServer()->getUrl() .
'base/relative/path/to/resource?another=query&z=1')
258 $client =
new Client($baseUrl);
259 $this->assertEquals($result, $client->get($url)->getUrl());
264 $client =
new Client(
'http://{a}/{b}');
265 $this->assertEquals(
'http:///', $client->getBaseUrl());
266 $this->assertEquals(
'http://{a}/{b}', $client->getBaseUrl(
false));
267 $client->setConfig(array(
271 $this->assertEquals(
'http://test.com/index.html', $client->getBaseUrl());
279 $request = $client->createRequest();
280 $this->assertEquals(
'GET', $request->getMethod());
281 $this->assertEquals($client->getBaseUrl(), $request->getUrl());
284 $request = $client->createRequest(
'DELETE');
285 $this->assertEquals(
'DELETE', $request->getMethod());
286 $this->assertEquals($client->getBaseUrl(), $request->getUrl());
289 $request = $client->createRequest(
'HEAD',
'http://www.test.com/');
290 $this->assertEquals(
'HEAD', $request->getMethod());
291 $this->assertEquals(
'http://www.test.com/', $request->getUrl());
294 $request = $client->createRequest(
'PUT');
295 $this->assertEquals(
'PUT', $request->getMethod());
298 $client->getConfig()->set(
'a', 1)->set(
'b', 2);
299 $request = $client->createRequest(
'PUT',
'/path/{a}?q={b}');
300 $this->assertEquals($request->getUrl(), $this->getServer()->getUrl() .
'path/1?q=2');
306 $client =
new Client($url .
'base');
307 $this->assertEquals(
'GET', $client->get()->getMethod());
308 $this->assertEquals(
'PUT', $client->put()->getMethod());
309 $this->assertEquals(
'POST', $client->post()->getMethod());
310 $this->assertEquals(
'HEAD', $client->head()->getMethod());
311 $this->assertEquals(
'DELETE', $client->delete()->getMethod());
312 $this->assertEquals(
'OPTIONS', $client->options()->getMethod());
313 $this->assertEquals(
'PATCH', $client->patch()->getMethod());
314 $this->assertEquals($url .
'base/abc', $client->get(
'abc')->getUrl());
315 $this->assertEquals($url .
'zxy', $client->put(
'/zxy')->getUrl());
316 $this->assertEquals($url .
'zxy?a=b', $client->post(
'/zxy?a=b')->getUrl());
317 $this->assertEquals($url .
'base?a=b', $client->head(
'?a=b')->getUrl());
318 $this->assertEquals($url .
'base?a=b', $client->delete(
'/base?a=b')->getUrl());
323 $client =
new Client(
'http://www.test.com/api/v1', array(
326 $request = $client->get(
'relative/{test}');
327 $this->assertEquals(
'http://www.test.com/api/v1/relative/123', $request->getUrl());
333 $request = $client->get(
'http://www.google.com/');
334 $this->assertEquals(
'http://www.google.com/', $request->getUrl());
335 $request->setResponse(
new Response(200),
true);
341 $mock = $this->getMock(
'Guzzle\\Http\\Curl\\CurlMulti', array(
'add',
'send'));
342 $mock->expects($this->once())
344 ->will($this->returnSelf());
345 $mock->expects($this->once())
347 ->will($this->returnSelf());
350 $client->setCurlMulti($mock);
352 $request = $client->get();
353 $request->setResponse(
new Response(200),
true);
354 $client->send($request);
368 $mock->addResponse($responses[0]);
369 $mock->addResponse($responses[1]);
370 $mock->addResponse($responses[2]);
372 $client->getEventDispatcher()->addSubscriber($mock);
377 $client->put(
'/',
null,
'test')
380 $this->assertEquals(array(
384 ), $client->send($requests));
392 $mock->addResponse($response);
393 $client->getEventDispatcher()->addSubscriber($mock);
394 $this->assertEquals($response, $client->send($client->get()));
405 $mock->addResponse($response);
406 $client->getEventDispatcher()->addSubscriber($mock);
407 $client->send($client->get());
417 $mock->addResponse(
new Response(200));
418 $mock->addResponse(
new Response(404));
419 $client->getEventDispatcher()->addSubscriber($mock);
420 $client->send(array($client->get(), $client->head()));
425 $client =
new Client(
'http://test.com', array(
426 'path' => array(
'foo',
'bar'),
427 'query' =>
'hi there',
433 $request = $client->get(
'{/path*}{?query,data*}');
434 $this->assertEquals(
'http://test.com/foo/bar?query=hi%20there&test=a%26b', $request->getUrl());
435 $this->assertEquals(
'hi there', $request->getQuery()->get(
'query'));
436 $this->assertEquals(
'a&b', $request->getQuery()->get(
'test'));
441 $client =
new Client(
'http://test.com', array(
442 'path' => array(
'foo',
'bar'),
443 'query' =>
'hi there',
445 $request = $client->get(
'http://test.com{?query}');
446 $this->assertEquals(
'http://test.com?query=hi%20there', $request->getUrl());
447 $this->assertEquals(
'hi there', $request->getQuery()->get(
'query'));
452 $client =
new Client(
'http://test.com');
453 $ref = new \ReflectionMethod($client,
'getUriTemplate');
454 $ref->setAccessible(
true);
455 $a = $ref->invoke($client);
456 $this->assertSame($a, $ref->invoke($client));
458 $this->assertNotSame($a, $ref->invoke($client));
463 $client =
new Client(
'http://test.com', array(
'test' =>
'hi'));
464 $ref = new \ReflectionMethod($client,
'expandTemplate');
465 $ref->setAccessible(
true);
466 $uri = $ref->invoke($client,
'http://{test}{?query*}', array(
'query' => array(
'han' =>
'solo')));
467 $this->assertEquals(
'http://hi?han=solo', $uri);
476 $this->assertEquals(
'/hi', (
string) $client->createRequest(
'GET', array(
'/{var}', $vars))->getUrl());
477 $this->assertEquals(
'/hi', (
string) $client->get(array(
'/{var}', $vars))->getUrl());
478 $this->assertEquals(
'/hi', (
string) $client->put(array(
'/{var}', $vars))->getUrl());
479 $this->assertEquals(
'/hi', (
string) $client->post(array(
'/{var}', $vars))->getUrl());
480 $this->assertEquals(
'/hi', (
string) $client->head(array(
'/{var}', $vars))->getUrl());
481 $this->assertEquals(
'/hi', (
string) $client->options(array(
'/{var}', $vars))->getUrl());
487 $default = array(
'X-Test' =>
'Hi!');
488 $other = array(
'X-Other' =>
'Foo');
491 $client->setDefaultHeaders($default);
492 $this->assertEquals($default, $client->getDefaultHeaders()->getAll());
493 $client->setDefaultHeaders(
new Collection($default));
494 $this->assertEquals($default, $client->getDefaultHeaders()->getAll());
496 $request = $client->createRequest(
'GET',
null, $other);
497 $this->assertEquals(
'Hi!', $request->getHeader(
'X-Test'));
498 $this->assertEquals(
'Foo', $request->getHeader(
'X-Other'));
500 $request = $client->createRequest(
'GET',
null,
new Collection($other));
501 $this->assertEquals(
'Hi!', $request->getHeader(
'X-Test'));
502 $this->assertEquals(
'Foo', $request->getHeader(
'X-Other'));
504 $request = $client->createRequest(
'GET');
505 $this->assertEquals(
'Hi!', $request->getHeader(
'X-Test'));
513 $this->assertNotSame($client1->getCurlMulti(), $client2->getCurlMulti());
519 $agent = $this->readAttribute($client,
'userAgent');
520 $version = curl_version();
521 $testAgent = sprintf(
'Guzzle/%s curl/%s PHP/%s',
Version::VERSION, $version[
'version'], PHP_VERSION);
522 $this->assertEquals($agent, $testAgent);
524 $client->setUserAgent(
'foo');
525 $this->assertEquals(
'foo', $this->readAttribute($client,
'userAgent'));
531 $request = $client->createRequest(
'GET',
'http://www.foo.com', array(
'User-agent' =>
'foo'));
532 $this->assertEquals(
'foo', (
string) $request->getHeader(
'User-Agent'));
538 $request = $client->createRequest(
'GET',
'http://www.foo.com');
539 $this->assertContains(
'Guzzle/', (
string) $request->getHeader(
'User-Agent'));
545 $client->getConfig()->set(
'request.options', array(
546 'query' => array(
'test' =>
'123',
'other' =>
'abc'),
547 'headers' => array(
'Foo' =>
'Bar',
'Baz' =>
'Bam')
549 $request = $client->createRequest(
'GET',
'http://www.foo.com?test=hello', array(
'Foo' =>
'Test'));
551 $this->assertEquals(
'Test', (
string) $request->getHeader(
'Foo'));
552 $this->assertEquals(
'hello', $request->getQuery()->get(
'test'));
554 $this->assertEquals(
'abc', $request->getQuery()->get(
'other'));
555 $this->assertEquals(
'Bam', (
string) $request->getHeader(
'Baz'));
561 $request = $client->createRequest(
'GET',
'http://www.foo.com?test=hello', array(
'Foo' =>
'Test'),
null, array(
562 'cookies' => array(
'michael' =>
'test')
564 $this->assertEquals(
'test', $request->getCookie(
'michael'));
571 $client->setDefaultOption(
'headers/foo',
'bar');
572 $this->assertEquals(
'bar', $client->getDefaultOption(
'headers/foo'));
574 $client->setDefaultOption(
'allow_redirects',
false);
575 $this->assertFalse($client->getDefaultOption(
'allow_redirects'));
577 $this->assertEquals(array(
578 'headers' => array(
'foo' =>
'bar'),
579 'allow_redirects' =>
false
580 ), $client->getConfig(
'request.options'));
582 $request = $client->get(
'/');
583 $this->assertEquals(
'bar', $request->getHeader(
'foo'));
589 $head = $client->head(
'http://www.foo.com', array(), array(
'query' => array(
'foo' =>
'bar')));
590 $this->assertEquals(
'bar', $head->getQuery()->get(
'foo'));
595 $client =
new Client(
'http://www.foo.com');
597 'http://www.foo.com/httpfoo',
598 $client->createRequest(
'GET',
'httpfoo')->getUrl()