HTTP requests¶
The http_request() function¶
The http_request() function allows to make HTTP(S) requests easily. It
performs HTTP(S) request and returns an instance of
Symfony\Contracts\HttpClient\ResponseInterface:
use Castor\Attribute\AsTask;
use function Castor\io;
use function Castor\http_request;
#[AsTask()]
function foo()
{
io()->writeln(http_request('GET', 'https://example.org')->getContent());
}
The http_download() function¶
The http_download() function simplifies the process of downloading files
through HTTP(S) protocol. It writes the response content directly to a specified
file path.
The stream parameter controls whether the download is chunked (true, default
value), which is useful for large files as it uses less memory, or in one go
(false).
use Castor\Attribute\AsTask;
use function Castor\io;
use function Castor\http_download;
#[AsTask()]
function foo()
{
http_download('https://example.org/file', '/path/to/your/local/file', stream: true);
io()->writeln('Download completed!');
}
When running Castor in verbose mode, http_download() outputs useful logs,
including a progress indicator to track the download status.
18:55:09 INFO [castor] Filename determined for http download ["filename" => "100MB-speedtest","url" => "http://eu-central-1.linodeobjects.com/speedtest/100MB-speedtest"]
18:55:11 INFO [castor] Download progress: 29.72 MB/100.00 MB (29.72%) at 18.40 MB/s, ETA: 3s ["url" => "http://eu-central-1.linodeobjects.com/speedtest/100MB-speedtest"]
18:55:13 INFO [castor] Download progress: 74.94 MB/100.00 MB (74.94%) at 20.73 MB/s, ETA: 1s ["url" => "http://eu-central-1.linodeobjects.com/speedtest/100MB-speedtest"]
18:55:14 INFO [castor] Download progress: 100.00 MB/100.00 MB (100.00%) at 20.69 MB/s, ETA: 0s ["url" => "http://eu-central-1.linodeobjects.com/speedtest/100MB-speedtest"]
18:55:14 INFO [castor] Download finished ["url" => "http://eu-central-1.linodeobjects.com/speedtest/100MB-speedtest","filePath" => "/www/castor/100MB-speedtest","size" => "100.00 MB"]
The http_client() function¶
If you need to have a full control on the HTTP(S) client, you can access the
HttpClientInterface directly with the http_client() function:
use Castor\Attribute\AsTask;
use function Castor\http_client;
#[AsTask()]
function foo()
{
$client = http_client()
->withOptions([
'verify_peer' => false,
'timeout' => 10,
])
;
}
You can check the Symfony documentation for more information about this component and how to use it.