Skip to content

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.