Skip to main content

PHP

Firecrawl PHP SDK 是对 Firecrawl API 的封装,可帮助你轻松将网站转换为 markdown。
3 min read

安装#

官方 PHP SDK 在 Firecrawl 的 monorepo 中维护,位于 apps/php-sdk

要安装 Firecrawl PHP SDK,请通过 Composer 添加此依赖:

Note
需要 PHP 8.1 或更高版本。

Laravel 集成#

该 SDK 提供对 Laravel 的原生支持,并支持自动发现。安装该软件包后,请发布配置文件:

然后将你的 API 密钥添加到 .env 文件中:

支持以下环境变量:

变量默认值描述
FIRECRAWL_API_KEY你的 Firecrawl API 密钥 (必填)
FIRECRAWL_API_URLhttps://api.firecrawl.devAPI 基础 URL
FIRECRAWL_TIMEOUT300HTTP 请求超时时间 (秒)
FIRECRAWL_MAX_RETRIES3临时故障时的自动重试次数
FIRECRAWL_BACKOFF_FACTOR0.5指数退避系数 (秒)

使用方式#

  1. firecrawl.dev 获取 API 密钥
  2. 将 API 密钥设置为名为 FIRECRAWL_API_KEY 的环境变量,或通过 FirecrawlClient::create(apiKey: ...) 传入 API 密钥

以下是一个基于当前 SDK API 的简要示例:

使用 Laravel 门面#

在 Laravel 应用中,可以使用 Firecrawl 门面,或通过依赖注入:

抓取 URL#

如需抓取单个 URL,请使用 scrape 方法。

JSON 提取#

通过 scrape 端点,使用 JsonFormat 提取结构化 JSON:

爬取网站#

要爬取网站并等待其完成,请使用 crawl

开始爬取#

使用 startCrawl 启动任务,无需等待。

查看爬取状态#

使用 getCrawlStatus 查看爬取进度。

取消爬取#

使用 cancelCrawl 取消正在进行中的爬取。

爬取错误#

使用 getCrawlErrors 获取爬取过程中的错误 (如有) 。

网站映射#

使用 map 发现网站中的链接。

搜索网页#

使用 search 并可选配搜索设置进行搜索。

批量抓取#

使用 batchScrape 并行抓取多个 URL。

如需手动控制异步流程,请使用 startBatchScrapegetBatchScrapeStatuscancelBatchScrape

代理#

使用 agent 运行 AI 代理。

使用结构化输出的 JSON schema:

如需手动控制异步执行,请使用 startAgentgetAgentStatuscancelAgent

使用方式与指标#

查看并发数和剩余额度:

Laravel AI SDK 工具#

该 SDK 内置了适用于 Laravel AI SDK (laravel/ai) 的原生工具类,因此代理无需 MCP 服务器 或手动发起 HTTP 调用,即可抓取、搜索、映射和爬取网页。

Note
需要 firecrawl/firecrawl-sdk 1.9.0 或更高版本,以及 laravel/ai 0.9 或更高版本 (PHP 8.3+、Laravel 12+) 。这些工具类仅在安装了 laravel/ai 后才会加载。

这些工具会从容器中解析出 FirecrawlClient,因此你现有的 config/firecrawl.phpFIRECRAWL_API_KEY 配置可直接原样复用:

可用工具#

工具名称功能
FirecrawlScrapefirecrawl_scrape抓取单个 URL 并返回干净的 markdown
FirecrawlSearchfirecrawl_search进行网页搜索,返回 JSON 结果
FirecrawlMapfirecrawl_map发现网站中的 URL
FirecrawlCrawlfirecrawl_crawl将多个页面爬取为 markdown

这些工具名称与 Firecrawl MCP 服务器一致,因此代理在不同入口看到的术语也保持统一。可使用 spread helper 一次性注册这四个工具:

每个工具也都支持显式传入客户端,适用于临时凭证或在容器外部使用。FirecrawlTools::all() 会将该客户端传给全部四个工具:

工具参数#

每个工具都会提供一个面向模型的小型 schema。以下是代理可传递的参数:

工具参数描述
firecrawl_scrapeurl (必填)要抓取页面的绝对 URL,包括协议
firecrawl_searchquery (必填)搜索词
limit返回结果的最大数量,1–20。默认值为 5
firecrawl_mapurl (必填)要映射的网站基础 URL
search可选关键词,用于按相关性筛选已发现的 URL
limit返回 URL 的最大数量,1–500。默认值为 100
firecrawl_crawlurl (必填)开始爬取的 URL
limit爬取页面的最大数量,1–25。默认值为 5

超出范围的 limit 值不会被拒绝,而是会自动调整到最近的边界值,因此当模型请求 99 个搜索结果时,返回的是 20 个,而不是报错。

工具行为#

限流、超时和无效 URL 等工具故障不会以抛出异常的形式处理,而是作为可读的错误字符串返回给模型,因此代理运行可以优雅降级。为保持在模型上下文范围内,输出大小会受到限制:scrape 结果会截断至 80,000 个字符;crawl 结果在总结果预算为 100,000 个字符的前提下,每页截断至 15,000 个字符;search 和 map 结果则会移除末尾条目,并用明确的标记说明有内容被省略。

firecrawl_searchfirecrawl_map 返回 JSON 结果数组。firecrawl_scrape 以 markdown 格式返回页面。

抓取结果#

firecrawl_crawl 最多会等待 55 秒让抓取完成,随后返回一个明确体现结果的 JSON 对象。失败、已取消或部分完成的抓取结果会通过 status 字段继续对模型可见,而不会被静默截断:

当结果装不下时,会出现两个可选字段:omittedPages 表示为控制在输出预算内而省略的页面数,note 则会告知模型服务器上还有更多页面,并提示它使用更小的 limit,或通过 firecrawl_scrape 抓取特定页面。该工具会报告分页信息,而不会继续跟随分页,因此需要获取大型爬取全部页面的代理应直接使用 FirecrawlClient

如果 wait 到期时爬取仍在进行中,工具会明确说明,并提醒模型该爬取仍可能在服务器端继续完成。启动爬取时会附带一个 UUID 幂等键,因此 HTTP 层面的重试绝不会创建重复的爬取。

如果你的代理运行在排队任务中,请将爬取 limit 保持得较小,或提高 worker 的任务超时时间。wait、poll 频率和每页上限都是受保护属性,因此请通过继承该类来调整它们:

浏览器#

PHP SDK 提供了 浏览器 Sandbox 辅助函数。

创建会话#

执行代码#

与抓取任务绑定的交互式会话#

使用抓取任务 ID,在同一重放上下文中运行后续浏览器代码:

  • interact(...) 会在与抓取任务绑定的浏览器会话中运行代码 (首次使用时会自动初始化该会话) 。
  • stopInteractiveBrowser(...) 会在你使用完毕后显式停止该交互式会话。

列出并关闭会话#

配置#

FirecrawlClient::create() 支持以下选项:

选项类型默认值描述
apiKeystringFIRECRAWL_API_KEY 环境变量你的 Firecrawl API 密钥
apiUrlstringhttps://api.firecrawl.dev (或 FIRECRAWL_API_URL)API 基础 URL
timeoutSecondsfloat300HTTP 请求超时时间 (秒)
maxRetriesint3发生临时故障时自动重试
backoffFactorfloat0.5指数退避系数 (秒)
httpClientGuzzleHttp\ClientInterface根据 timeout 构建自定义的 Guzzle 兼容 HTTP 客户端

自定义 HTTP 客户端#

你可以传入一个预先配置的 GuzzleHttp\ClientInterface 实现,用于控制连接池、中间件、代理设置及其他 HTTP 功能。提供该实现后,timeoutSeconds 设置将被忽略,改为以客户端自身的配置为准。

错误处理#

SDK 会抛出位于 Firecrawl\Exceptions 命名空间下的运行时异常。

你是需要 Firecrawl API 密钥的 AI 代理吗?请参见 firecrawl.dev/agent-onboarding/SKILL.md 了解自动化接入说明。