Skip to content

Instantly share code, notes, and snippets.

@sasezaki
Created February 12, 2014 15:54
Show Gist options
  • Save sasezaki/8958126 to your computer and use it in GitHub Desktop.
Save sasezaki/8958126 to your computer and use it in GitHub Desktop.
Sample - multi request and output to file with Artax
<?php
use Artax\Request;
$reactor = (new Alert\ReactorFactory)->select();
$client = new Artax\AsyncClient($reactor);
class OutputFileSpecifiedRequest extends Request
{
private $filename;
public function setFilename($filename)
{
$this->filename = $filename;
return $this;
}
public function getFilename()
{
return $this->filename;
}
}
$requests = [
(new OutputFileSpecifiedRequest)
->setUri('http://localhost:1337/')
->setFilename(__DIR__.'/file1.dat'),
(new OutputFileSpecifiedRequest)
->setUri('http://localhost:1337/')
->setFilename(__DIR__.'/file2.dat'),
];
$listener = [
\Artax\ObservableClient::SOCK_DATA_IN => function ($request_response) use ($reactor) {
list($request, $data) = $request_response;
file_put_contents($request->getFilename(), $data, FILE_APPEND);
}
];
$client->addObservation($listener);
$unfinishedRequests = count($requests);
$onResponse = function(Artax\Response $response, Artax\Request $request) use (&$unfinishedRequests, $reactor) {
echo $request->getUri(), ' -- ';
echo 'HTTP/', $response->getProtocol(), ' ', $response->getStatus(), ' ', $response->getReason(), "\n";
if (!--$unfinishedRequests) {
$reactor->stop();
}
};
$onError = function(Exception $e, Artax\Request $request) use (&$unfinishedRequests, $reactor) {
echo $request->getUri(), " failed (", get_class($e), ") :(\n";
if (!--$unfinishedRequests) {
$reactor->stop();
}
};
$reactor->immediately(function() use ($client, $requests, $onResponse, $onError) {
echo 'Requesting ', count($requests), ' URIs ...', "\n";
foreach ($requests as $uri) {
$client->request($uri, $onResponse, $onError);
}
});
$reactor->run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment