Laravel Tutorials

Customize the Truncation of HTTP Client Request Exceptions

Published
Customize the Truncation of HTTP Client Request Exceptions image

Have you ever received a bug report or looked in Sentry only to find a truncated HTTP client exception you couldn't read? By default, HTTP responses are truncated, which could potentially leave off important clues as to why a request failed or what happened:

HTTP request returned status code 422:
{"error":{"code":422,"message":"The Request can not be completed because the provided request contains invalid data. Key at 'cus (truncated...)

Starting in Laravel 11.35, you can now control this behavior with two new convenience methods that you can add to your application's bootstrap/app.php file:

// bootstrap/app.php
 
use Illuminate\Http\Client\RequestException;
 
return Application::configure(basePath: dirname(__DIR__))
    // ...
    ->withExceptions(function (Exceptions $exceptions) {
        $exceptions->dontTruncateRequestExceptions();
 
        // Or ...
 
        $exceptions->truncateRequestExceptionsAt(260);
    })->create();

When an HTTP client exception happens, it will not be truncated anymore, or if you still want truncation, you can control the length of truncation to make it longer than the original. Of course, you can still catch HTTP client exceptions and report anything about the exception that you want:

try {
    $response = Http::throws()->get('https://api.example.com/some-error');

    // ...
} catch (\Illuminate\Http\Client\RequestException $e) {
    Log::error('HTTP Error', [
        // The message will be truncated (or not) based on your setting.
        'message' => $e->getMessage(),
        'response' => $e->response->json(),
        'status' => $e->response->status(),
        // ...
    ]);
}

You can learn more about working with exceptions in Laravel's HTTP client from the Laravel documentation, which includes all the conditional error handling and truncation docs.

A shoutout to Steve Bauman for making this possible in Pull Request #53734 as part of Laravel 11.35.0!

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
Email Sending and Testing for Laravel in One Account image

Email Sending and Testing for Laravel in One Account

Read article
Decide with Jev: Tie Every AI Check to the Exact Draft image

Decide with Jev: Tie Every AI Check to the Exact Draft

Read article
PIE 1.5 Changes PHP Extension Installs in CI image

PIE 1.5 Changes PHP Extension Installs in CI

Read article
Delete Expired Sessions in Laravel With a Scheduled Command image

Delete Expired Sessions in Laravel With a Scheduled Command

Read article
Pollora: Run WordPress Inside a Laravel Application image

Pollora: Run WordPress Inside a Laravel Application

Read article
Scheduled Session Garbage Collection in Laravel 13.39 image

Scheduled Session Garbage Collection in Laravel 13.39

Read article