spatie/visit
Human-friendly curl for the terminal. Visit any URL and display its response with colorized output (HTML via bat, JSON via jq), plus status code and response time. Supports custom HTTP methods and options like following redirects.
spatie/visit package is ideal for applications requiring web scraping, URL inspection, or dynamic content extraction (e.g., SEO tools, link previews, or content validation). It excels in scenarios where raw HTML output or rendered content (via headless browsers) is needed without full-fledged scraping frameworks like Symfony Panther or Guzzle.puppeteer or playwright for dynamic content).guzzlehttp/guzzle, symfony/dom), reducing integration friction.'visit' => [
'timeout' => 30,
'client' => App\Services\CustomHttpClient::class,
],
spatie/visit package in tandem with spatie/laravel-headless-chrome for hybrid approaches.Visit::delay()) or proxies.puppeteer/playwright for JS support increases complexity and resource usage. Assess whether the use case justifies the overhead.robots.txt, terms of service)?Http facade, Guzzle middleware) suffice?config/visit.php.Visit::queue()).file_get_contents() with Visit::url().$content = Visit::url('https://example.com')->html();
spatie/laravel-headless-chrome or spatie/visit + Playwright.$visit = Visit::url('https://example.com')->withHeadlessBrowser();
$content = $visit->html();
spatie/ray).spatie/queueable-middleware for async visits with retries.puppeteer/playwright (Node.js dependency).Schema::create('visited_urls', function (Blueprint $table) {
$table->id();
$table->string('url');
$table->text('html')->nullable();
$table->boolean('success');
$table->timestamps();
});
Visit::log()).Visit::cacheFor(seconds)).spatie/visit for breaking changes (e.g., Guzzle version bumps). Use composer require spatie/visit --with-all-dependencies to test updates.Visit::debug() to inspect HTTP traffic.timeout in config or implement retries.Visit::withOptions(['user_agent' => '...']).VisitJob::dispatch('https://example.com')->delay(now()->addMinute());
| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Target URL returns 403/429 | Scraping blocked | Implement retries with exponential backoff. |
| Headless browser crashes | Dynamic content fails | Use spatie/visit without JS or fallback to static. |
| High latency/timeout | Slow responses | Increase timeout or use async processing. |
| Dependency vulnerabilities | Security risks | Regular composer audit and updates. |
| Rate limiting by target | IP bans | Rotate proxies/user agents. |
config/visit.php with team-specific defaults.How can I help you explore Laravel packages today?