public function testExecute() { $dispatcher = new Dispatcher(); $request1 = m::mock('jyggen\\Curl\\Request', array('http://example.com/'))->shouldDeferMissing(); $request2 = m::mock('jyggen\\Curl\\Request', array('http://example.org/'))->shouldDeferMissing(); $request1->shouldReceive('execute')->andReturn(true); $request2->shouldReceive('execute')->andReturn(true); $request1->shouldReceive('getRawResponse')->andReturnUsing(function () use($request1) { return curl_multi_getcontent($request1->getHandle()); }); $request2->shouldReceive('getRawResponse')->andReturnUsing(function () use($request2) { return curl_multi_getcontent($request2->getHandle()); }); $dispatcher->add($request1); $dispatcher->add($request2); $dispatcher->execute(); $response1 = $request1->getRawResponse(); $response2 = $request2->getRawResponse(); $this->assertStringStartsWith('HTTP/1.1 200 OK', $response1); $this->assertStringStartsWith('HTTP/1.1 200 OK', $response2); }
public function getDocumentByURI($args) { $uris = is_array($args) ? $args : [$args]; $dp = new Dispatcher(); $requests = $documents = []; foreach ($uris as $uri) { $requests[] = new Request('http://' . self::DOMAIN . '/' . $uri); $dp->add(end($requests)); } $dp->execute(); foreach ($requests as $request) { $raw = substr($request->getRawResponse(), $request->getInfo(CURLINFO_HEADER_SIZE)); if ($request->getResponse()->headers->get('location')) { throw new RedirectException(); } else { if (!$raw) { throw new URIException(); } } $documents[] = new Document($raw); } return is_array($args) ? $documents : $documents[0]; }