HttpClientRecorder

Imen EZZINE

Développeuse PHP Symfony

Café Tech avec Imen

@imenezzine

 

 Communauté de symfony en Tunisie

Imen Ezzine

RecordHttpClientBundle

// ./tests/Controller/TestGetRandomController.php

use Symfony\Bridge\PhpUnit\HttpClientRecorder\Attribute\UseRecord;
use Symfony\Component\HttpClient\RecorderMode;

#[UseRecord]
public function testGetRandomEndpointExists(): void
{
    $client = static::createClient();
    $client->request('GET', 'random');

    $this->assertResponseIsSuccessful();
}
{
    "log": {
        "version": "1.2",
        "creator": {
            "name": "HttpRecorder"
        },
        "entries": [
            {
                "startedDateTime": "2026-03-26T15:03:51.772Z",
                "request": {
                    "method": "GET",
                    "url": "https:\/\/catfact.ninja\/fact",
                    "postData": null
                },
                "response": {
                    "status": 200,
                    "headers": {
                        "date": [
                            "Thu, 26 Mar 2026 15:03:54 GMT"
                        ],
                        "content-type": [
                            "application\/json"
                        ],
                        "server": [
                            "cloudflare"
                        ],
                        "cache-control": [
                            "no-cache, private"
                        ],
                        "x-ratelimit-limit": [
                            "100"
                        ],
                        "x-ratelimit-remaining": [
                            "99"
                        ],
                        "access-control-allow-origin": [
                            "*"
                        ],
                        "set-cookie": [
                            "XSRF-TOKEN=eyJpdiI6ImpHRWw3ejdpeVJJb3RMTGZ6ZnRpVnc9PSIsInZhbHVlIjoiTkpJbVZFejNhYWRuaUlINmZTaExPOFhpeWs2QkRoZkxZV2hnNWozb2xmWlhmblFhK2JzRUZ1amNwRm5hcDhSRnhuZkplNTFvZ0o1bWVWeHZNVi9mN2p4ZjREMU0rLzRSTzN0UStsMDltR1dERnlZZ3pFK0tGZUVIY1Joa1hUQUwiLCJtYWMiOiIxMGE4YzJjZWE2MTVlNTVlNzQ0MDBkYTMxN2E2MzkxYzg1ZGE1NTNlNzFiZmM2N2YyOWNhN2FiYTIyNGE0OGI1IiwidGFnIjoiIn0%3D; expires=Thu, 26-Mar-2026 17:03:54 GMT; Max-Age=7200; path=\/; secure; samesite=lax",
                            "catfacts_session=eyJpdiI6InIyUmZPQWc3UEhrYkgwK1AvUEpjc0E9PSIsInZhbHVlIjoiRTJaZDdiVWxzSzl3VlFReHZjU21RRWxkcTdIUTh1U0RjN01QZTBTd0hueW9TUE84UStib1RmL3lZdVFRSm9RRmZzbXBCY2thcmViZGdBQytid3pPN3hVaUJCeEN6ZzQzYlNLUWhMVTRGS2xnelpvVUFnc2RyWS9PZUE1aS9vR1QiLCJtYWMiOiI0NzViNjQwMzQzZjExMzY2ZGZhNGJkZDJiNjdjNWI2OTRlZjdiMTU1YTZiMjUxZWFkZmUyZjIzZWUxMmNlNDRjIiwidGFnIjoiIn0%3D; expires=Thu, 26-Mar-2026 17:03:54 GMT; Max-Age=7200; path=\/; secure; httponly; samesite=lax",
                            "146rl06Wfdn6IPq2gJmWGMFny4Z4ebKlr9aPenOX=eyJpdiI6IlJRaFRBNEpFTkJlaEFMaFZnOWFUc1E9PSIsInZhbHVlIjoicjI3Rzhkd2JzVUFzam0xYU4xQ0lXSkMyTEhqaFFkblFnUUt5S1o0R0NDSmJ4UFpTeUZkcEY5TE1CTXlNelkyYm5SYnNuSkZic2xmVGlDTXA4K09SRTJyeXFXUnJTMWs1NWdtY2d0YWp5bHFvMzVnUkliN1BxUXdnSy9Da0FHeGNGL1l4ck5BUUs0Qk54a0xXM05GaXVHMTM4a0JIVWFMeFJISGFXbTJrSWRUSHRZQnBhNEFSem9hTm9HM2dEOFpnOVUrSjBidG82THF1NkNLUkVhMzliZStZNDdLemZqWmdZcjhUcnVuUitueUFXWU9md1hmWVl2aTRHNFd0Y1pQSlZTeXNTaEZzS0RZZzV4QU83dzdETzkyMUYvR3ljeHVhYUtHSHEzdzN1aFRKZ0d6eXo0emVzam5xN3lySGRsMmpDMmtncjh5UURJWjhaVC82NnFNM0tQcTVQb0dLRXZLN0x5dkxSVHlLQnlCUGN1Y3VtM20zN1V5T2ZUR2MzK3RHIiwibWFjIjoiMDk3MWMzMTE5YWVhNWZiOTczMjc1MjliNWJlZWYwMTQ1NDVmMGJkZDQ2YjcxOGYyNmY5ZGU3ODczNDVhM2VjYyIsInRhZyI6IiJ9; expires=Thu, 26-Mar-2026 17:03:54 GMT; Max-Age=7200; path=\/; secure; httponly; samesite=lax"
                        ],
                        "x-frame-options": [
                            "SAMEORIGIN"
                        ],
                        "x-xss-protection": [
                            "1; mode=block"
                        ],
                        "x-content-type-options": [
                            "nosniff"
                        ],
                        "nel": [
                            "{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}"
                        ],
                        "cf-cache-status": [
                            "DYNAMIC"
                        ],
                        "report-to": [
                            "{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https:\/\/a.nel.cloudflare.com\/report\/v4?s=EvdmjcUbEfp1RDsHahL3OCUZ6AsKZuzi0azgv44IduLdEo2pS48xThEO17zeu2VqGBnpPK8ieUXbShnb68Y4Jqc23M8%2FZV83M002KZEP4ecrO7V5%2BeXXZYWcANhD4mv3\"}]}"
                        ],
                        "content-encoding": [
                            "gzip"
                        ],
                        "cf-ray": [
                            "9e270b77fca085fe-CDG"
                        ],
                        "alt-svc": [
                            "h3=\":443\"; ma=86400"
                        ]
                    },
                    "content": {
                        "text": "{\"fact\":\"The Maine Coon cat is America's only natural breed of domestic feline. It is 4 to 5 times larger than the Singapura, the smallest breed of cat.\",\"length\":143}"
                    }
                }
            }
        ]
    }
}

Démo?

HTTPClientRecorder

By Imen TROUDI

HTTPClientRecorder

  • 4