Installation
composer require namshi/cuzzle
Add to compser.json if using a monorepo or custom package manager.
Basic Usage
use Namshi\Cuzzle\Cuzzle;
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://api.example.com/data');
// Dump the request to cURL
$curlCommand = Cuzzle::make($client->getLastRequest());
echo $curlCommand;
First Use Case: Debugging API Calls
Cuzzle::make($request) to generate a cURL command from a Guzzle request.curl client to replicate the request.Debugging Middleware Create a middleware to log cURL commands for all requests:
use Namshi\Cuzzle\Cuzzle;
use Psr\Http\Message\RequestInterface;
class LogCurlMiddleware
{
public function __invoke(RequestInterface $request, $next)
{
$response = $next($request);
$curl = Cuzzle::make($request);
\Log::debug('API Request:', ['curl' => $curl]);
return $response;
}
}
Register in app/Http/Kernel.php:
protected $middleware = [
\App\Http\Middleware\LogCurlMiddleware::class,
];
Testing API Responses Use cURL commands to test API endpoints locally:
$request = $client->request('POST', '/api/users', ['json' => ['name' => 'John']]);
$curl = Cuzzle::make($request);
// Copy-paste $curl into terminal to test.
Generating Documentation Extract cURL examples from Guzzle requests for API docs:
$curlExamples = collect($apiRequests)->map(fn($req) => Cuzzle::make($req));
Http facade:
$response = Http::get('https://api.example.com/data');
$curl = Cuzzle::make($response->getRequest());
request or complete events to log cURL commands:
$client->on('request', function ($request) {
\Log::debug('Request:', ['curl' => Cuzzle::make($request)]);
});
$request = $client->createRequest('GET', '/data', [
'headers' => ['Authorization' => 'Bearer token'],
'query' => ['page' => 1],
]);
$curl = Cuzzle::make($request);
Missing Request Data
GET without query params), Cuzzle may omit it. Ensure you pass the full request object:
$request = $client->getLastRequest(); // Use this instead of partial data.
POST requests, verify the body is included in the cURL command. If not, check if the request was modified (e.g., by middleware).Sensitive Data Exposure
if (app()->environment('local')) {
\Log::debug('API Request:', ['curl' => Cuzzle::make($request)]);
}
$request = $request->withoutHeader('Authorization');
$curl = Cuzzle::make($request);
Complex Requests
$request = $client->createRequest('POST', '/upload', [
'body' => new \CurlFile('/path/to/file.jpg'),
]);
Guzzle Version Compatibility
if (version_compare(\GuzzleHttp\version(), '6.0.0') < 0) {
// Use alternative approach or update Guzzle.
}
Cuzzle:
dd($request->getMethod(), $request->getUri(), $request->getHeaders());
curl Directly
Run the generated cURL command manually to isolate issues:
curl -v -X POST https://api.example.com/data -H "Authorization: Bearer token"
$client = new Client(['handler' => HandlerStack::create()]);
Cuzzle to modify the command (e.g., add proxies, verbose flags):
class CustomCuzzle extends Cuzzle
{
protected function getCurlCommand(): string
{
$command = parent::getCurlCommand();
return str_replace('--data', '--data --verbose', $command);
}
}
use Namshi\Cuzzle\Cuzzle;
use Illuminate\Support\Facades\Http;
Http::on(function ($request) {
if (app()->environment('local')) {
Telescope::log('API Request', [
'curl' => Cuzzle::make($request),
]);
}
});
How can I help you explore Laravel packages today?