teknoo/curl-request
A lightweight PHP wrapper around cURL for building and sending HTTP requests. It offers a simple object-oriented API for handling URLs, headers, methods, and responses, making it easy to integrate clean cURL-based calls into any PHP project.
Architecture fit — poor. teknoo/curl-request is a standalone cURL wrapper, originally forked from zeroem/curl-bundle with Symfony coupling stripped out. That decoupling is the package's only architectural virtue, and it is not enough. Modern Laravel ships Illuminate\Http\Client backed by Guzzle, which already provides the same request-building and execution surface plus middleware, retries, fakes, and event hooks. Adopting this package means adding a second, non-standard HTTP abstraction alongside the one the framework treats as canonical. It is not PSR-18/PSR-7 compliant (based on its lineage), so it cannot be swapped behind an interface without an adapter we would have to write and own.
Integration feasibility — low, and the blockers are structural rather than cosmetic. The repository is archived and the description itself opens with "DEPRECATED." Archives on GitHub are read-only: no issue triage, no PRs, no security patches. Composer installation may still resolve if the tagged versions remain on Packagist, but every constraint against that code is frozen in time. On a PHP 8.2+/Laravel 11 codebase, the realistic outcome is either a dependency conflict at install or a package that installs and then misbehaves against modern cURL/TLS defaults.
Technical risk — high and asymmetric. The downside is unbounded (a deprecated HTTP layer with no upstream maintainer sits directly on the path of every outbound call, including anything carrying credentials or webhooks) and the upside is zero, because the framework already solves the problem. Specific concerns to validate before any decision: default CURLOPT_SSL_VERIFYPEER/VERIFYHOST behavior, redirect handling, timeout defaults, whether exceptions are typed or generic, and whether responses are objects or bare strings.
Key questions for the team:
Http::withOptions() cannot do in a single line?opportunity: 9.96: that figure almost certainly reflects absence of competing packages, not addressable value. With 1 star, 0 dependents, and an archive flag, there is no ecosystem to capture. The score is a false positive and should not be used to justify a spike.Recommendation: Do not adopt. This is a replace-or-remove decision, not an evaluate decision.
Stack fit — negative. Laravel's HTTP client is a first-class, documented, testable facade with Http::fake() support in the test suite. Introducing teknoo/curl-request would mean outbound calls that are invisible to the framework's fakes, so tests would either hit the network or require bespoke mocking. That is a regression in testability, not a lateral move.
Migration path — exit-oriented. There is no sensible greenfield adoption path. The only migration worth planning is off this package:
curl_exec usage that may have been copied from its README).Illuminate\Http\Client, preserving method signatures so call sites compile unchanged.Compatibility — unverified and presumed broken. PHP 8.x compatibility, Laravel 10/11/12 support, and behavior under modern TLS defaults all need explicit confirmation. Assume failure until proven otherwise; this is an archived package from the pre-PHP-8 era.
Sequencing. Confirm Packagist availability and PHP constraints first — if it will not install, the rest of the conversation is moot and the answer is a one-line "no." Then inventory usage. Only if usage exists is engineering time justified, and then it is scoped as a removal project with a defined end date, not an integration project. Budget it inside an existing HTTP-standardization effort rather than as standalone work.
Maintenance — we would inherit 100% of it. Archived means no upstream. Any bug fix, PHP version bump, or security patch becomes our fork to maintain. For a wrapper whose entire function is curl_setopt and curl_exec, the maintenance cost is pure overhead with no compensating capability.
Support — none. No maintainer, no issue tracker, no CVE response, no Stack Overflow corpus. Security review will flag an unmaintained HTTP client on the outbound path, correctly. Expect this to surface in vendor risk or dependency scanning as an unresolved finding that never closes because there is nobody to close it.
Scaling — blocking by construction. Synchronous cURL in a PHP-FPM worker or queue job holds the process for the full round-trip. There is no connection pooling, no concurrency, no async. If it ever lands in a hot path or a fan-out call pattern, throughput degrades in direct proportion to downstream latency. Laravel's client offers pooled and concurrent requests; this does not.
Failure modes — quiet and expensive.
max_execution_time kills them.RequestException handling and any centralized error reporting.Ramp-up — near-zero benefit, non-zero cost. Every PHP developer on the team already knows Guzzle or Laravel's client; nobody needs to learn this. The only "ramp-up" is the cost of un-learning wherever the package's idioms have crept in, plus the reviewer time spent explaining to future engineers why an archived dependency exists. That question will be asked, and the answer will not be flattering.
How can I help you explore Laravel packages today?